อัลกอริทึมการเรียงลำดับหมายความว่า“ เสถียร” หมายความว่าอย่างไร


43

ในการอ่านเกี่ยวกับอัลกอริทึมการเรียงลำดับต่าง ๆ ที่ฉันเคยเห็นมันบอกว่าบางตัวเป็น "เสถียร" และบางอันไม่ได้ หมายความว่าอย่างไรและการแลกเปลี่ยนใดที่เกี่ยวข้องกับพื้นฐานนั้นเมื่อเลือกอัลกอริทึม


32
คำถามนี้จะตอบได้อย่างง่ายดายภายในหนึ่งนาทีด้วย wikipedia en.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus

5
@MareInfinitus แม่นยำยิ่งขึ้น: en.wikipedia.org/wiki/Sorting_algorithm#Stability
BЈовић

4
นี่คือคำถามที่ขาดการวิจัยของตัวเอง ตอบด้วยภาพวิกิพีเดีย และมันก็ได้รับการตอบรับที่ดีจริงๆซึ่งทำให้ฉันเสียใจ ควรปิด IMHO และไม่รับ upvotes
Mare Infinitus

4
ในทางกลับกันฉันเพิ่งเห็นสิ่งนี้และเรียนรู้สิ่งใหม่ ถ้าฉันรู้ว่าฉันไม่รู้เรื่องนี้ฉันก็สามารถค้นคว้าได้ แต่เพราะ OP ถามคำถามตอนนี้ฉันรู้แล้วว่าฉันไม่รู้อะไรเลยว่าไม่รู้
Kazark

4
โดยทั่วไป "แค่ google it" หรือ "ค้นหาในวิกิพีเดีย" ไม่ใช่คำตอบที่ยอมรับได้มากในไซต์ StackExchange เพราะพวกเขาไม่ได้ให้คำตอบกับสิ่งที่ผู้ร้องเรียนกำลังตรวจสอบว่าเป็นคำถามที่ถูกต้องกับการเรียกร้องไปยังหน่วยงานของ Google และวิกิพีเดีย หากคำถามนั้นซ้ำซ้อนกับคำถามหรือคำถามอื่นภายในโปรแกรมเมอร์สแต็คการแลกเปลี่ยนคุณสามารถบ่นได้
Michael Paulukonis

คำตอบ:


88

การจัดเรียงที่เสถียรคือสิ่งที่รักษาลำดับดั้งเดิมของชุดอินพุตซึ่งอัลกอริธึมการเปรียบเทียบไม่แยกความแตกต่างระหว่างสองรายการขึ้นไป

พิจารณาอัลกอริทึมการเรียงลำดับที่เรียงลำดับไพ่ตามลำดับแต่ไม่ใช่ตามความเหมาะสม การเรียงลำดับที่เสถียรจะรับประกันได้ว่าลำดับเดิมของการ์ดที่มีอันดับเดียวกันจะถูกสงวนไว้ การเรียงลำดับที่ไม่เสถียรจะไม่

ป้อนคำอธิบายรูปภาพที่นี่


38
การแก้ไข: อัลกอริทึมที่ไม่เสถียรแสดงพฤติกรรมที่ไม่ได้กำหนดเมื่อสององค์ประกอบเท่ากันเป็นไปได้อย่างสมบูรณ์แบบที่บางครั้งคำสั่งนั้นจะถูกเก็บรักษาไว้
aaaaaaaaaaaa

9
รูปภาพสวยมากคล้ายกับวิกิพีเดียen.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus

9
@MareInfinitus: เป็นสาธารณสมบัติ ตรวจสอบที่มาของภาพต้นฉบับ
Robert Harvey

2
ภาพที่ดีอธิบายได้เร็วขึ้นและลึกกว่าคำจำนวนมากในกรณีทั่วไป ปัญหาด้านกฎหมายไม่ใช่สิ่งที่ฉันต้องการพูดคุย
Mare Infinitus

3
@ RobertHarvey ที่จริงแล้วฉันเชื่อว่าตัวแก้ไขนั้นถูกต้อง ขณะนี้โพสต์ของคุณบอกว่าการเรียงแบบเสถียรนั้นคงลำดับของไพ่ในชุดเดียวกัน แต่การ์ดในชุดเดียวกันจะมีอันดับที่แตกต่างกันดังนั้นจึงต้องจัดเรียงใหม่เพื่อให้ได้ลำดับที่เรียง ตัวอย่างเช่นการเรียงลำดับไม่รักษาลำดับของ 2 และ 5 ของหัวใจ มันคือการเรียงลำดับของการ์ดที่มีอันดับเดียวกัน(และชุดที่แตกต่างกัน) ที่สร้างความแตกต่างระหว่างความเสถียรและความไม่แน่นอน
David Z

26

อัลกอริธึมที่เสถียรรักษาลำดับสัมพัทธ์ขององค์ประกอบ

ดังนั้นอัลกอริธึมการเรียงลำดับที่เสถียรจะรักษาลำดับสัมพัทธ์ของค่าที่เปรียบเทียบเท่ากัน

พิจารณาอัลกอริทึมการเรียงลำดับที่เราเรียงลำดับคอลเลกชันของคะแนน 2d ตามมิติ X ของพวกเขา

คอลเลกชันที่จะเรียง: {(6, 3), (5, 5), (6, 1), (1, 3)}

จัดเรียงเสถียร: {(1, 3), (5, 5), (6, 3), (6, 1)}

จัดเรียงปกติ: อย่างใดอย่าง{(1, 3), (5, 5), (6, 3), (6, 1)}หนึ่งหรือ{(1, 3), (5, 5), (6, 1), (6, 3)}


สำหรับการแลกเปลี่ยน ... การเรียงลำดับที่เสถียรนั้นมีประสิทธิภาพน้อยกว่า แต่บางครั้งคุณก็ต้องการ

ตัวอย่างเช่นเมื่อผู้ใช้คลิกส่วนหัวคอลัมน์เพื่อเรียงลำดับค่าใน UI มีเหตุผลที่คาดว่าจะเรียงลำดับการเรียงลำดับก่อนหน้าของเขาที่จะใช้ในกรณีที่มีค่าเท่ากัน


2
มันมีประสิทธิภาพลดลงไหม? ดูเหมือนว่า "ชัดเจน" แต่อัลกอริธึมการเรียงลำดับที่ดีที่สุดบางอย่างนั้นมีความเสถียรโดยธรรมชาติ (เช่นอะไรก็ตามที่เรียงตามการผสานเช่นการเรียงลำดับแบบ Tim) พวกเขาไม่จำเป็นต้องทำงานพิเศษเพิ่มเติมใด ๆ เพื่อให้เสถียร

9
เสถียรภาพไม่มีอะไรเกี่ยวข้องกับประสิทธิภาพโดยทั่วไป การรวมกันทำงานใน O (n * log n) และมีเสถียรภาพ Heapsort มีประสิทธิภาพคล้ายกัน แต่ไม่เสถียร
Mare Infinitus

2
"Stable" สามารถใช้กับโครงสร้างข้อมูลเช่น "มั่นคงกอง" คือกองซึ่ง dequeues รายการที่มีลำดับความสำคัญเดียวกันในลำดับเดียวกันพวกเขาถูกจัดคิว สิ่งนี้สำคัญมากสำหรับอัลกอริธึมการค้นหาเส้นทางที่มีประสิทธิภาพ
BlueRaja - Danny Pflughoeft

1
ไม่มีการเรียงลำดับที่เสถียรซึ่งเป็นการเปรียบเทียบO (n ln n)และO (1)ในหน่วยความจำ ความเร็วไม่ได้เป็นเพียงการวัดประสิทธิภาพเท่านั้น ความจริงที่ว่าคุณไม่สามารถจัดเรียงเรื่องในสถานที่ได้อย่างมั่นคง
QuestionC

3
@QuestionC ดูเหมือนว่าการเรียงบล็อกมีความเสถียรและเหมาะกับขอบเขตเหล่านั้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.