ผลต่างระหว่างรุ่นของ "การเรียงลำดับแบบฟอง"
บรรทัด 18: | บรรทัด 18: | ||
การปรับปรุงประสิทธิภาพของการเรียงลำดับแบบฟองนั้นวิธีการหนึ่งก็คือการทำให้ค่าน้อยที่อยู่หลังๆ นั้นลงมาด้านหน้าได้เร็วขึ้น นั่นคือหลักการของ [[Cocktail Sort]] ซึ่งมีขั้นตอนวิธีคล้ายการเรียงลำดับแบบฟองมากเพียงแต่ทำงานทั้งขาไปและขากลับ ขาไปนั้นทำงานเหมือนการเรียงลำดับแบบฟองทุกประการ ส่วนขากลับก็เพียงกลับด้านของการเรียงลำดับแบบฟองนั่นเอง แต่การปรับปรุงดังนี้ก็ไม่ได้ทำให้ประสิทธิภาพในกรณีแย่ที่สุดดีกว่า O(n<sup>2</sup>) แต่อย่างใด |
การปรับปรุงประสิทธิภาพของการเรียงลำดับแบบฟองนั้นวิธีการหนึ่งก็คือการทำให้ค่าน้อยที่อยู่หลังๆ นั้นลงมาด้านหน้าได้เร็วขึ้น นั่นคือหลักการของ [[Cocktail Sort]] ซึ่งมีขั้นตอนวิธีคล้ายการเรียงลำดับแบบฟองมากเพียงแต่ทำงานทั้งขาไปและขากลับ ขาไปนั้นทำงานเหมือนการเรียงลำดับแบบฟองทุกประการ ส่วนขากลับก็เพียงกลับด้านของการเรียงลำดับแบบฟองนั่นเอง แต่การปรับปรุงดังนี้ก็ไม่ได้ทำให้ประสิทธิภาพในกรณีแย่ที่สุดดีกว่า O(n<sup>2</sup>) แต่อย่างใด |
||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
v |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
vFacebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima |
|||
Facebook : Nunnapat Yenjaima |
|||
v |
|||
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima |
|||
=== ตัวอย่างทีละขั้นตอน === |
=== ตัวอย่างทีละขั้นตอน === |
รุ่นแก้ไขเมื่อ 13:06, 13 มกราคม 2563
บทความนี้ไม่มีการอ้างอิงจากแหล่งที่มาใด |
ภาพจำลองการทำงานของการเรียงลำดับแบบฟอง | |
ประเภท | ขั้นตอนวิธีการเรียงลำดับ |
---|---|
โครงสร้างข้อมูล | รายการ |
ประสิทธิภาพเมื่อเกิดกรณีแย่ที่สุด | |
ประสิทธิภาพเมื่อเกิดกรณีดีที่สุด | |
ประสิทธิภาพเมื่อเกิดกรณีทั่วไป | |
ปริมาณความต้องการพื้นที่เมื่อเกิดกรณีแย่ที่สุด | ใช้พื่นที่ เพิ่มเติม |
ในสาขาวิทยาการคอมพิวเตอร์ การเรียงลำดับแบบฟอง (อังกฤษ: bubble sort) เป็นขั้นตอนวิธีการเรียงลำดับที่เรียบง่ายมาก ดำเนินการบนโครงสร้างข้อมูลประเภทรายการ ทำงานโดยเปรียบเทียบสมาชิกที่อยู่ติดกัน เมื่อพบตำแหน่งที่ผิด (นั่นคือตัวหน้ามากกว่าตัวหลังในกรณีการเรียงจากน้อยไปมาก) ก็จะทำการสลับข้อมูลกัน และจะดำเนินการซ้ำแบบนี้ไปเรื่อยๆจนกว่าจะไม่มีตำแหน่งที่ผิดอีกซึ่งบ่งบอกว่ารายการนั้นเรียงแล้ว ชื่อของขั้นตอนวิธีนี้มีมาจากสมาชิกที่น้อยที่สุดจะค่อยๆถูกสลับขึ้นมาจนอยู่หน้าสุดของรายการ เปรียบได้กับฟองที่ค่อยๆผุดขึ้นมาถึงผิวน้ำ เนื่องจากขั้นตอนวิธีนี้ใช้เพียงการเปรียบเทียบจึงเป็นการเรียงแบบเปรียบเทียบ นอกจากนี้ยังเป็นการเรียงแบบเสถียรอีกด้วย ถึงแม้ว่าการเรียงลำดับแบบฟองจะเป็นขั้นตอนวิธีที่เรียบง่ายมาก แต่ไม่เหมาะในการเรียงข้อมูลจำนวนมากซึ่งมีวิธีการเรียงข้อมูลที่มีประสิทธิภาพมากกว่
ประสิทธิภาพ
/ประสิทธิภาพของการเรียงลำดับแบบฟองขึ้นอยู่กับตำแหน่งของข้อมูลต่างๆ ที่อยู่ในรายการ หากมีค่ามากอยู่ตัวแรกๆ การเรียงลำดับแบบฟองจะมีประสิทธิภาพดี เพราะว่าการทำงานเพียงรอบเดียวก็สามารถทำให้ค่ามากไปอยู่ในตำแหน่งที่ใกล้เคียงกับตำแหน่งจริงได้ เช่นมีค่ามากที่สุดอยู่ในตำแหน่งแรก การทำงานรอบเดียวก็เพียงพอที่จะลากค่านั้นไปอยู่ตำแหน่งสุดท้ายได้ แต่กลับกันหากมีค่าน้อยอยู่หลังๆ การทำงานหนึ่งรอบจะสามารถเลื่อนค่านั้นมาด้านหน้าได้เพียงเล็กน้อย เช่นหากค่านั้นเป็นค่าน้อยที่สุดการทำงานหนึ่งรอบจะเลื่อนค่านั้นมาด้านหน้าได้เพียงหนึ่งตำแหน่งเท่านั้น
กระต่ายและเต่า
การปรับปรุงประสิทธิภาพของการเรียงลำดับแบบฟองนั้นวิธีการหนึ่งก็คือการทำให้ค่าน้อยที่อยู่หลังๆ นั้นลงมาด้านหน้าได้เร็วขึ้น นั่นคือหลักการของ Cocktail Sort ซึ่งมีขั้นตอนวิธีคล้ายการเรียงลำดับแบบฟองมากเพียงแต่ทำงานทั้งขาไปและขากลับ ขาไปนั้นทำงานเหมือนการเรียงลำดับแบบฟองทุกประการ ส่วนขากลับก็เพียงกลับด้านของการเรียงลำดับแบบฟองนั่นเอง แต่การปรับปรุงดังนี้ก็ไม่ได้ทำให้ประสิทธิภาพในกรณีแย่ที่สุดดีกว่า O(n2) แต่อย่างใด
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
v
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
vFacebook : Nunnapat Yenjaima
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima
Facebook : Nunnapat Yenjaima
v
Facebook : Nunnapat YenjaimaFacebook : Nunnapat YenjaimaFacebook : Nunnapat Yenjaima
ตัวอย่างทีละขั้นตอน
การเรียงลำดับเลข 5 1 4 2 8 ในลิสต์ จากน้อยไปมาก ในแต่ละขั้นตอนตัวหนาหมายถึงตัวที่กำลังถูกเปรียบเทียบ
รอบที่ 1
( 5 1 4 2 8 ) ( 1 5 4 2 8 ), เปรียบเทียบตัวปัจจุบันกับตัวถัดไป สลับเนื่องจาก 5 > 1
( 1 5 4 2 8 ) ( 1 4 5 2 8 ), สลับเนื่องจาก 5 > 4
( 1 4 5 2 8 ) ( 1 4 2 5 8 ), สลับเนื่องจาก 5 > 2
( 1 4 2 5 8 ) ( 1 4 2 5 8 ), ไม่สลับเนื่องจาก 5 ไม่มากกว่า 8
รอบที่ 2
( 1 4 2 5 8 ) ( 1 4 2 5 8 )
( 1 4 2 5 8 ) ( 1 2 4 5 8 ), สลับเนื่องจาก 4 > 2
( 1 2 4 5 8 ) ( 1 2 4 5 8 )
( 1 2 4 5 8 ) ( 1 2 4 5 8 )
ถึงแม้ว่าข้อมูลในลิสต์จะเรียงหมดแล้ว แต่ว่าก็ต้องตรวจสอบอีกครั้งหนึ่ง
รอบที่ 3
( 1 2 4 5 8 ) ( 1 2 4 5 8 )
( 1 2 4 5 8 ) ( 1 2 4 5 8 )
( 1 2 4 5 8 ) ( 1 2 4 5 8 )
( 1 2 4 5 8 ) ( 1 2 4 5 8 )
ในรอบนี้ไม่มีการสลับ แสดงว่าลำดับเลขเรียงจากน้อยไปมากแล้ว
ตัวอย่างรหัสเทียม
begin bubbleSort ( A คือ แถวลำดับที่จะถูกเรียง )
do
ทำเครื่องหมายว่ายังไม่มีการสลับ
for i = 1 to ขนาดของ(A)-1
if A[i-1] > A[i] then
สลับ A[i-1] กับ A[i]
ทำเครื่องหมายว่ามีการสลับแล้ว
end if
end for
until ไม่มีการสลับแล้ว
end
การปรับปรุงประสิทธิภาพ
หมายเหตุ
ในการเรียงลำดับจากน้อยไปมากเสร็จหนึ่งรอบจะทำให้ค่าที่มากที่สุดลำดับที่ i ไปอยู่ในตำแหน่งที่ n-1 ดังนั้นจึงสามารถมองข้ามตำแหน่งที่ n-1 ในการทำงานรอบต่อไปได้ procedure bubbleSort(A : list of sortable items)
n := length(A) repeat swapped := false for i := 1 to n - 1 inclusive do if A[i - 1] > A[i] then swap(A[i - 1], A[i]) swapped = true end if end for n := n - 1 until not swapped
end procedure
ส่วนนี้รอเพิ่มเติมข้อมูล คุณสามารถช่วยเพิ่มข้อมูลส่วนนี้ได้ |
อ้างอิง
จะกล่าวได้ว่าการเรียงลำดับแบบฟองนั้นเป็นหนึ่งในขั้นตอนวิธีการเรียงลำดับที่ง่ายที่สุดเท่าที่เรารู้จัก ด้วย O(n2) ทำให้ประสิทธิภาพของมันลดลงอย่างมากแม้เราเพิ่มจำนวนสมาชิกที่จะเรียงเพียงเล็กน้อย แม้จะเปรียบเทียบขั้นตอนวิธีการเรียงลำดับที่มี O(n2) ด้วยกันนั้นการเรียงลำดับแบบแทรกก็นับว่ามีประสิทธิภาพดีกว่าในกรณีทั่วๆ ไป แต่ด้วยความง่ายของขั้นตอนวิธีและความง่ายในการเขียนทำให้เราพบเห็นการเรียงลำดับแบบฟองได้อยู่ทั่วไป และมักจะได้เป็นขั้นตอนวิธีการเรียงลำดับแรกๆ ที่ผู้เริ่มเขียนโปรแกรมได้ศึกษานั่นเอง
ส่วนนี้รอเพิ่มเติมข้อมูล คุณสามารถช่วยเพิ่มข้อมูลส่วนนี้ได้ |
อ้างอิง
ส่วนนี้รอเพิ่มเติมข้อมูล คุณสามารถช่วยเพิ่มข้อมูลส่วนนี้ได้ |