ในหลักสูตรอัลกอริทึมมาตรฐานเราได้รับการสอนว่าquicksortคือโดยเฉลี่ยและในกรณีที่แย่ที่สุด ในเวลาเดียวกันขั้นตอนวิธีการเรียงลำดับอื่น ๆ มีการศึกษาซึ่งเป็นในกรณีที่เลวร้ายที่สุด (เช่นmergesortและheapsort ) และเวลาแม้กระทั่งการเชิงเส้นในกรณีที่ดีที่สุด (เช่นการเรียงลำดับแบบฟอง ) แต่มีความต้องการเพิ่มเติมบางส่วนของหน่วยความจำO ( n 2 ) O ( n log n )
หลังจากมองผ่าน ๆ ในเวลาที่วิ่งเร็วขึ้นมันเป็นเรื่องธรรมดาที่จะบอกว่า quicksort ไม่ควรมีประสิทธิภาพเหมือนกับคนอื่น ๆ
นอกจากนี้ให้พิจารณาว่านักเรียนเรียนรู้ในหลักสูตรการเขียนโปรแกรมพื้นฐานที่การเรียกซ้ำโดยทั่วไปไม่ดีนักเพราะอาจใช้หน่วยความจำมากเกินไป ฯลฯ ดังนั้น (และแม้ว่านี่จะไม่ใช่การโต้แย้งจริง) สิ่งนี้ทำให้เกิดความคิดว่า ดีจริงๆเพราะเป็นอัลกอริทึมแบบเรียกซ้ำ
เหตุใด quicksort จึงมีประสิทธิภาพสูงกว่าอัลกอริทึมการเรียงลำดับอื่น ๆ ในทางปฏิบัติ มันเกี่ยวข้องกับโครงสร้างของข้อมูลจริงหรือไม่? มันเกี่ยวข้องกับการทำงานของหน่วยความจำในคอมพิวเตอร์หรือไม่? ฉันรู้ว่าความทรงจำบางอย่างนั้นเร็วกว่าวิธีอื่น ๆ แต่ฉันไม่รู้ว่านั่นเป็นเหตุผลที่แท้จริงสำหรับประสิทธิภาพการตอบโต้ที่ใช้งานง่ายนี้หรือไม่ (เมื่อเปรียบเทียบกับการประเมินเชิงทฤษฎี)
อัปเดต 1:คำตอบที่ยอมรับได้บอกว่าค่าคงที่ที่เกี่ยวข้องในของกรณีเฉลี่ยนั้นเล็กกว่าค่าคงที่ที่เกี่ยวข้องในอัลกอริทึมอื่น ๆ อย่างไรก็ตามฉันยังไม่เห็นเหตุผลที่ถูกต้องพร้อมการคำนวณที่แม่นยำแทนที่จะใช้ความคิดที่เป็นธรรมชาติเท่านั้นO ( n log n )
ไม่ว่าในกรณีใดดูเหมือนว่าความแตกต่างที่แท้จริงเกิดขึ้นตามที่บางคำแนะนำในระดับหน่วยความจำซึ่งการใช้งานใช้ประโยชน์จากโครงสร้างภายในของคอมพิวเตอร์โดยใช้ตัวอย่างเช่นหน่วยความจำแคชนั้นเร็วกว่า RAM การอภิปรายที่น่าสนใจอยู่แล้ว แต่ผมยังต้องการดูรายละเอียดเพิ่มเติมเกี่ยวกับการจัดการหน่วยความจำเพราะมันปรากฏว่าคำตอบที่ได้จะทำอย่างไรกับมัน
อัปเดต 2:มีหน้าเว็บหลายหน้าที่นำเสนอการเปรียบเทียบอัลกอริทึมการเรียงลำดับบางอันที่น่าสนใจกว่าเพจอื่น ๆ นอกเหนือจากการนำเสนอการช่วยเหลือด้านภาพที่ดีวิธีนี้ไม่ตอบคำถามของฉัน