Algoritme manakah yang Array#sort()
digunakan fungsi JavaScript ? Saya mengerti bahwa itu bisa mengambil segala macam argumen dan fungsi untuk melakukan berbagai macam jenis, saya hanya tertarik pada algoritma yang menggunakan jenis vanilla.
javascript
algorithm
arrays
sorting
latortuga
sumber
sumber
Jawaban:
Jika Anda melihat bug ini 224128 , tampaknya MergeSort sedang digunakan oleh Mozilla.
sumber
Aku baru saja melihat pada WebKit (Chrome, Safari ...) sumber . Bergantung pada jenis array, berbagai metode sortir digunakan:
Array angka (atau array tipe primitif) diurutkan menggunakan fungsi pustaka standar C ++
std::qsort
yang mengimplementasikan beberapa variasi quicksort (biasanya introsort ).Array yang bersebelahan dari tipe non-numerik dirangkai dan diurutkan menggunakan mergesort, jika tersedia (untuk mendapatkan pengurutan yang stabil) atau
qsort
jika tidak ada pengurutan gabungan yang tersedia.Untuk tipe lain (array yang tidak bersebelahan dan mungkin untuk array asosiatif) WebKit menggunakan salah satu jenis seleksi (yang mereka sebut semacam "min" ) atau, dalam beberapa kasus, itu mengurutkan melalui pohon AVL. Sayangnya, dokumentasi di sini agak kabur sehingga Anda harus melacak jalur kode untuk benar-benar melihat jenis metode yang digunakan.
Dan kemudian ada permata seperti komentar ini :
- Mari kita berharap bahwa siapa pun yang benar-benar "memperbaiki" ini memiliki pemahaman yang lebih baik tentang runtime asimptotik daripada penulis komentar ini, dan menyadari bahwa radix sort memiliki deskripsi runtime yang sedikit lebih kompleks daripada hanya O (N).
(Terima kasih kepada phsource karena menunjukkan kesalahan dalam jawaban aslinya.)
sumber
Tidak ada persyaratan wajib bagi JS untuk menggunakan algorthim penyortiran tertentu. Seperti banyak yang telah disebutkan di sini, Mozilla menggunakan semacam gabungan. Namun, dalam kode sumber Chrome v8, mulai hari ini, ia menggunakan QuickSort dan InsertionSort, untuk array yang lebih kecil.
Sumber Mesin V8
Dari Garis 807 - 891
Pembaruan Pada 2018 V8 menggunakan TimSort, terima kasih @celwell. Sumber
sumber
Standar skrip ECMA tidak menentukan algoritma pengurutan mana yang akan digunakan. Memang, browser yang berbeda menampilkan algoritma pengurutan yang berbeda. Misalnya, sortir () Mozilla / Firefox tidak stabil (dalam arti kata sortir) saat menyortir peta. Semacam IE () stabil.
sumber
Array.sort
; lihat pertanyaan ini .Setelah beberapa penelitian lebih lanjut, tampaknya, untuk Mozilla / Firefox, Array.sort () menggunakan mergesort. Lihat kodenya di sini .
sumber
Saya pikir itu akan tergantung pada implementasi browser apa yang Anda maksud.
Setiap jenis browser memiliki implementasi mesin javascript sendiri, jadi itu tergantung. Anda dapat memeriksa repos kode sumber untuk Mozilla dan Webkit / Khtml untuk implementasi yang berbeda.
IE adalah sumber tertutup, jadi Anda mungkin harus bertanya kepada seseorang di microsoft.
sumber
Pada V8 v7.0 / Chrome 70, V8 menggunakan TimSort , algoritma penyortiran Python. Chrome 70 dirilis pada 13 September 2018.
Lihat posting di blog dev V8 untuk detail tentang perubahan ini. Anda juga dapat membaca kode sumber atau tambalan 1186801 .
sumber
Fungsi JavaScript Array.sort () memiliki mekanisme internal untuk memilih algoritma penyortiran terbaik (QuickSort, MergeSort, dll.) Berdasarkan tipe data elemen array.
sumber
coba ini dengan sortir cepat:
sumber