ผลต่างระหว่างรุ่นของ "การเรียงลำดับแบบฟอง"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
ไม่มีความย่อการแก้ไข
บรรทัด 15:
 
== การวิเคาะห์ ==
== ประสิทธิภาพ ==
[[ไฟล์:Bubble-sort-example-300px.gif|300px|thumb|right|ภาพตัวอย่างแสดงการทำงานของการเรียงลำดับแบบฟองเพื่อเรียงลำดับจากน้อยไปมาก เร่มต้นทำงานจากทางซ้ายและเปรียบเทียบทีละคู่และสลับกันถ้าหากพบว่าตัวทางด้านซ้ายมีค่ามากกว่าตัวทางด้านขวา]]
 
ประสิทธิภาพของการเรียงลำดับแบบฟองขึ้นอยู่กับตำแหน่งของข้อมูลต่างๆ ที่อยู่ในรายการ หากมีค่ามากอยู่ตัวแรกๆ การเรียงลำดับแบบฟองจะมีประสิทธิภาพดี เพราะว่าการทำงานเพียงรอบเดียวก็สามารถทำให้ค่ามากไปอยู่ในตำแหน่งที่ใกล้เคียงกับตำแหน่งจริงได้ เช่นมีค่ามากที่สุดอยู่ในตำแหน่งแรก การทำงานรอบเดียวก็เพียงพอที่จะลากค่านั้นไปอยู่ตำแหน่งสุดท้ายได้ แต่กลับกันหากมีค่าน้อยอยู่หลังๆ การทำงานหนึ่งรอบจะสามารถเลื่อนค่านั้นมาด้านหน้าได้เพียงเล็กน้อย เช่นหากค่านั้นเป็นค่าน้อยที่สุดการทำงานหนึ่งรอบจะเลื่อนค่านั้นมาด้านหน้าได้เพียงหนึ่งตำแหน่งเท่านั้น
 
กระต่ายและเต่า
 
การปรับปรุงประสิทธิภาพของการเรียงลำดับแบบฟองนั้นวิธีการหนึ่งก็คือการทำให้ค่าน้อยที่อยู่หลังๆ นั้นลงมาด้านหน้าได้เร็วขึ้น นั่นคือหลักการของ [[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]]