Dalam kursus algoritma standar kita diajarkan bahwa quicksort rata-rata adalah dan dalam kasus terburuk. Pada saat yang sama, algoritma pengurutan lainnya dipelajari yaitu dalam kasus terburuk (seperti mergesort dan heapsort ), dan bahkan waktu linier dalam kasus terbaik (seperti bubblesort ) tetapi dengan beberapa kebutuhan memori tambahan.O ( n 2 ) O ( n log n )
Setelah sekilas melihat beberapa waktu berlari , wajar untuk mengatakan bahwa quicksort tidak seefisien yang lainnya.
Juga, pertimbangkan bahwa siswa belajar dalam kursus pemrograman dasar bahwa rekursi tidak benar-benar baik secara umum karena dapat menggunakan terlalu banyak memori, dll. Oleh karena itu (dan meskipun ini bukan argumen nyata), ini memberikan gagasan bahwa quicksort mungkin tidak sangat bagus karena merupakan algoritma rekursif.
Mengapa, kemudian, apakah quicksort mengungguli algoritma pengurutan lainnya dalam praktek? Apakah itu ada hubungannya dengan struktur data dunia nyata ? Apakah itu ada hubungannya dengan cara memori bekerja di komputer? Saya tahu bahwa beberapa ingatan jauh lebih cepat daripada yang lain, tetapi saya tidak tahu apakah itu alasan sebenarnya untuk kinerja kontra-intuitif ini (bila dibandingkan dengan perkiraan teoritis).
Pembaruan 1: jawaban kanonik mengatakan bahwa konstanta yang terlibat dalam dari kasus rata-rata lebih kecil daripada konstanta yang terlibat dalam algoritma . Namun, saya belum melihat pembenaran yang tepat dari ini, dengan perhitungan yang tepat, bukan hanya ide-ide intuitif saja.O ( n log n )
Dalam kasus apa pun, sepertinya perbedaan nyata terjadi, seperti beberapa jawaban menyarankan, pada tingkat memori, di mana implementasi mengambil keuntungan dari struktur internal komputer, menggunakan, misalnya, bahwa memori cache lebih cepat daripada RAM. Diskusi ini sudah menarik, tapi aku masih ingin melihat lebih detail sehubungan dengan manajemen memori, karena tampaknya bahwa para jawaban hubungannya dengan itu.
Pembaruan 2: Ada beberapa halaman web yang menawarkan perbandingan algoritma pengurutan, beberapa lebih bagus daripada yang lain (yang paling utama adalah sorting-algorithms.com ). Selain memberikan bantuan visual yang bagus, pendekatan ini tidak menjawab pertanyaan saya.