Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Thuật toán nào được dùng trong Array.sort() của JavaScript?

Spec JavaScript không quy định thuật toán cụ thể cho Array.sort(). Tùy engine triển khai. Các engine dùng thuật toán khác nhau:

  • Mozilla (SpiderMonkey): Merge Sort. Xem code C tại Mozilla repo.
  • WebKit (Chrome, Safari): Chọn thuật toán dựa trên kiểu element và độ dài mảng:
    • Mảng số: C++ std::sort (thường là Introsort - hybrid Quick/Heap/Insertion)
    • Mảng non-numeric: Merge Sort
    • Trường hợp khác: Selection Sort
  • V8 (Node.js, Chrome): Timsort (hybrid Merge/Insertion) - stable, tối ưu cho dữ liệu gần sorted
  • Chakra (Edge cũ): Quick Sort biến thể

Lưu ý: ES2019 yêu cầu sort() phải stable (giữ thứ tự element bằng nhau). V8 chuyển sang Timsort để đáp ứng. Trước đó V8 dùng Quick Sort unstable.