ผลต่างระหว่างรุ่นของ "การเรียงลำดับแบบฟอง"
เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
ไม่มีความย่อการแก้ไข |
|||
บรรทัด 15:
== การวิเคาะห์ ==
== ประสิทธิภาพ ==
ประสิทธิภาพของการเรียงลำดับแบบฟองขึ้นอยู่กับตำแหน่งของข้อมูลต่างๆ ที่อยู่ในรายการ หากมีค่ามากอยู่ตัวแรกๆ การเรียงลำดับแบบฟองจะมีประสิทธิภาพดี เพราะว่าการทำงานเพียงรอบเดียวก็สามารถทำให้ค่ามากไปอยู่ในตำแหน่งที่ใกล้เคียงกับตำแหน่งจริงได้ เช่นมีค่ามากที่สุดอยู่ในตำแหน่งแรก การทำงานรอบเดียวก็เพียงพอที่จะลากค่านั้นไปอยู่ตำแหน่งสุดท้ายได้ แต่กลับกันหากมีค่าน้อยอยู่หลังๆ การทำงานหนึ่งรอบจะสามารถเลื่อนค่านั้นมาด้านหน้าได้เพียงเล็กน้อย เช่นหากค่านั้นเป็นค่าน้อยที่สุดการทำงานหนึ่งรอบจะเลื่อนค่านั้นมาด้านหน้าได้เพียงหนึ่งตำแหน่งเท่านั้น
กระต่ายและเต่า
การปรับปรุงประสิทธิภาพของการเรียงลำดับแบบฟองนั้นวิธีการหนึ่งก็คือการทำให้ค่าน้อยที่อยู่หลังๆ นั้นลงมาด้านหน้าได้เร็วขึ้น นั่นคือหลักการของ [[Cocktail Sort]] ซึ่งมีขั้นตอนวิธีคล้ายการเรียงลำดับแบบฟองมากเพียงแต่ทำงานทั้งขาไปและขากลับ ขาไปนั้นทำงานเหมือนการเรียงลำดับแบบฟองทุกประการ ส่วนขากลับก็เพียงกลับด้านของการเรียงลำดับแบบฟองนั่นเอง แต่การปรับปรุงดังนี้ก็ไม่ได้ทำให้ประสิทธิภาพในกรณีแย่ที่สุดดีกว่า O(n<sup>2</sup>) แต่อย่างใด
เส้น 57 ⟶ 58:
=== การปรับปรุงประสิทธิภาพ ===
หมายเหตุ
ในการเรียงลำดับจากน้อยไปมากเสร็จหนึ่งรอบจะทำให้ค่าที่มากที่สุดลำดับที่ i ไปอยู่ในตำแหน่งที่ n-1 ดังนั้นจึงสามารถมองข้ามตำแหน่งที่ n-1 ในการทำงานรอบต่อไปได้
procedure bubbleSort(A : list of sortable items)
เส้น 73 ⟶ 76:
{{โครงส่วน}}
อ้างอิง
จะกล่าวได้ว่าการเรียงลำดับแบบฟองนั้นเป็นหนึ่งในขั้นตอนวิธีการเรียงลำดับที่ง่ายที่สุดเท่าที่เรารู้จัก ด้วย O(n<sup>2</sup>) ทำให้ประสิทธิภาพของมันลดลงอย่างมากแม้เราเพิ่มจำนวนสมาชิกที่จะเรียงเพียงเล็กน้อย แม้จะเปรียบเทียบขั้นตอนวิธีการเรียงลำดับที่มี O(n<sup>2</sup>) ด้วยกันนั้น[[การเรียงลำดับแบบแทรก]]ก็นับว่ามีประสิทธิภาพดีกว่าในกรณีทั่วๆ ไป แต่ด้วยความง่ายของขั้นตอนวิธีและความง่ายในการเขียนทำให้เราพบเห็นการเรียงลำดับแบบฟองได้อยู่ทั่วไป และมักจะได้เป็นขั้นตอนวิธีการเรียงลำดับแรกๆ ที่ผู้เริ่มเขียนโปรแกรมได้ศึกษานั่นเอง
{{โครงส่วน}}
อ้างอิง
* [[Cocktail Sort]]
|