บทความนี้ไม่มีจาก |
ในสาขาวิทยาการคอมพิวเตอร์ การเรียงลำดับแบบฟอง (อังกฤษ: bubble sort) เป็นขั้นตอนวิธีการเรียงลำดับที่เรียบง่ายมาก ดำเนินการบนโครงสร้างข้อมูลประเภทรายการ ทำงานโดยเปรียบเทียบสมาชิกที่อยู่ติดกัน เมื่อพบตำแหน่งที่ผิด (นั่นคือตัวหน้ามากกว่าตัวหลังในกรณีการเรียงจากน้อยไปมาก) ก็จะทำการสลับข้อมูลกัน และจะดำเนินการซ้ำแบบนี้ไปเรื่อยๆจนกว่าจะไม่มีตำแหน่งที่ผิดอีกซึ่งบ่งบอกว่ารายการนั้นเรียงแล้ว ชื่อของขั้นตอนวิธีนี้มีมาจากสมาชิกที่น้อยที่สุดจะค่อยๆถูกสลับขึ้นมาจนอยู่หน้าสุดของรายการ เปรียบได้กับฟองที่ค่อยๆผุดขึ้นมาถึงผิวน้ำ เนื่องจากขั้นตอนวิธีนี้ใช้เพียงการเปรียบเทียบจึงเป็น นอกจากนี้ยังเป็นอีกด้วย ถึงแม้ว่าการเรียงลำดับแบบฟองจะเป็นขั้นตอนวิธีที่เรียบง่ายมาก แต่ไม่เหมาะในการเรียงข้อมูลจำนวนมากซึ่งมีวิธีการเรียงข้อมูลที่มีประสิทธิภาพมากกว่า
ภาพจำลองการทำงานของการเรียงลำดับแบบฟอง | |
ประเภท | ขั้นตอนวิธีการเรียงลำดับ |
---|---|
โครงสร้างข้อมูล | รายการ |
ประสิทธิภาพเมื่อเกิดกรณีแย่ที่สุด | |
ประสิทธิภาพเมื่อเกิดกรณีดีที่สุด | |
ประสิทธิภาพเมื่อเกิดกรณีทั่วไป | |
ปริมาณความต้องการพื้นที่เมื่อเกิดกรณีแย่ที่สุด | ใช้พื่นที่ เพิ่มเติม |
การวิเคราะห์
ประสิทธิภาพ
ประสิทธิภาพของการเรียงลำดับแบบฟองขึ้นอยู่กับตำแหน่งของข้อมูลต่างๆ ที่อยู่ในรายการ หากมีค่ามากอยู่ตัวแรกๆ การเรียงลำดับแบบฟองจะมีประสิทธิภาพดี เพราะว่าการทำงานเพียงรอบเดียวก็สามารถทำให้ค่ามากไปอยู่ในตำแหน่งที่ใกล้เคียงกับตำแหน่งจริงได้ เช่นมีค่ามากที่สุดอยู่ในตำแหน่งแรก การทำงานรอบเดียวก็เพียงพอที่จะลากค่านั้นไปอยู่ตำแหน่งสุดท้ายได้ แต่กลับกันหากมีค่าน้อยอยู่หลังๆ การทำงานหนึ่งรอบจะสามารถเลื่อนค่านั้นมาด้านหน้าได้เพียงเล็กน้อย เช่นหากค่านั้นเป็นค่าน้อยที่สุดการทำงานหนึ่งรอบจะเลื่อนค่านั้นมาด้านหน้าได้เพียงหนึ่งตำแหน่งเท่านั้น
การปรับปรุงประสิทธิภาพของการเรียงลำดับแบบฟองนั้นวิธีการหนึ่งก็คือการทำให้ค่าน้อยที่อยู่หลังๆ นั้นลงมาด้านหน้าได้เร็วขึ้น นั่นคือหลักการของ ซึ่งมีขั้นตอนวิธีคล้ายการเรียงลำดับแบบฟองมากเพียงแต่ทำงานทั้งขาไปและขากลับ ขาไปนั้นทำงานเหมือนการเรียงลำดับแบบฟองทุกประการ ส่วนขากลับก็เพียงกลับด้านของการเรียงลำดับแบบฟองนั่นเอง แต่การปรับปรุงดังนี้ก็ไม่ได้ทำให้ประสิทธิภาพในกรณีแย่ที่สุดดีกว่า O(n2) แต่อย่างใด
ตัวอย่างทีละขั้นตอน
การเรียงลำดับเลข 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
( 1 4 2 5 8 ) ( 1 2 4 5 8 ), สลับเนื่องจาก 4 > 2
( 1 2 4 5 8 ) ( 1 2 4 5 8 ), ไม่สลับเพราะ 4 ไม่มากกว่า 5
( 1 2 4 5 8 ) ( 1 2 4 5 8 ), ไม่สลับเพราะ 5 ไม่มากกว่า 8
ถึงแม้ว่าข้อมูลในลิสต์จะเรียงหมดแล้ว แต่ว่าก็ต้องตรวจสอบอีกครั้งหนึ่ง
รอบที่ 3
( 1 2 4 5 8 ) ( 1 2 4 5 8 ), ไม่สลับเพราะ 1 ไม่มากกว่า 2
( 1 2 4 5 8 ) ( 1 2 4 5 8 ), ไม่สลับเพราะ 2 ไม่มากกว่า 4
( 1 2 4 5 8 ) ( 1 2 4 5 8 ), ไม่สลับเพราะ 4 ไม่มากกว่า 5
( 1 2 4 5 8 ) ( 1 2 4 5 8 ), ไม่สลับเพราะ 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 ในการทำงานรอบต่อไปได้
begin bubbleSort ( A คือ แถวลำดับที่จะถูกเรียง ) n = ขนาดของ(A) do ทำเครื่องหมายว่ายังไม่มีการสลับ for i = 1 to n-1 if A[i-1] > A[i] then สลับ A[i-1] กับ A[i] ทำเครื่องหมายว่ามีการสลับแล้ว end if end for n = n - 1 until ไม่มีการสลับแล้ว end
ในการทำงานจริง
ส่วนนี้รอเพิ่มเติมข้อมูล คุณสามารถช่วยเพิ่มข้อมูลส่วนนี้ได้ |
จะกล่าวได้ว่าการเรียงลำดับแบบฟองนั้นเป็นหนึ่งในขั้นตอนวิธีการเรียงลำดับที่ง่ายที่สุดเท่าที่เรารู้จัก ด้วย O(n2) ทำให้ประสิทธิภาพของมันลดลงอย่างมากแม้เราเพิ่มจำนวนสมาชิกที่จะเรียงเพียงเล็กน้อย แม้จะเปรียบเทียบขั้นตอนวิธีการเรียงลำดับที่มี O(n2) ด้วยกันนั้นการเรียงลำดับแบบแทรกก็นับว่ามีประสิทธิภาพดีกว่าในกรณีทั่วๆ ไป แต่ด้วยความง่ายของขั้นตอนวิธีและความง่ายในการเขียนทำให้เราพบเห็นการเรียงลำดับแบบฟองได้อยู่ทั่วไป และมักจะได้เป็นขั้นตอนวิธีการเรียงลำดับแรกๆ ที่ผู้เริ่มเขียนโปรแกรมได้ศึกษานั่นเอง
การเรียงรูปแบบอื่นที่แตกต่างออกไป
ส่วนนี้รอเพิ่มเติมข้อมูล คุณสามารถช่วยเพิ่มข้อมูลส่วนนี้ได้ |
การเรียกชื่อที่ผิด
ส่วนนี้รอเพิ่มเติมข้อมูล คุณสามารถช่วยเพิ่มข้อมูลส่วนนี้ได้ |
อ้างอิง
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
bthkhwamniimmikarxangxingcakaehlngthimaidkrunachwyprbprungbthkhwamni odyephimkarxangxingaehlngthimathinaechuxthux enuxkhwamthiimmiaehlngthimaxacthukkhdkhanhruxlbxxk eriynruwacanasaraemaebbnixxkidxyangiraelaemuxir insakhawithyakarkhxmphiwetxr kareriyngladbaebbfxng xngkvs bubble sort epnkhntxnwithikareriyngladbthieriybngaymak daeninkarbnokhrngsrangkhxmulpraephthraykar thanganodyepriybethiybsmachikthixyutidkn emuxphbtaaehnngthiphid nnkhuxtwhnamakkwatwhlnginkrnikareriyngcaknxyipmak kcathakarslbkhxmulkn aelacadaeninkarsaaebbniiperuxycnkwacaimmitaaehnngthiphidxiksungbngbxkwaraykarnneriyngaelw chuxkhxngkhntxnwithinimimacaksmachikthinxythisudcakhxythukslbkhunmacnxyuhnasudkhxngraykar epriybidkbfxngthikhxyphudkhunmathungphiwna enuxngcakkhntxnwithiniichephiyngkarepriybethiybcungepn nxkcakniyngepnxikdwy thungaemwakareriyngladbaebbfxngcaepnkhntxnwithithieriybngaymak aetimehmaainkareriyngkhxmulcanwnmaksungmiwithikareriyngkhxmulthimiprasiththiphaphmakkwakareriyngladbaebbfxngphaphcalxngkarthangankhxngkareriyngladbaebbfxngpraephthkhntxnwithikareriyngladbokhrngsrangkhxmulraykarprasiththiphaphemuxekidkrniaeythisudO n2 displaystyle O n 2 prasiththiphaphemuxekidkrnidithisudO n displaystyle O n prasiththiphaphemuxekidkrnithwipO n2 displaystyle O n 2 primankhwamtxngkarphunthiemuxekidkrniaeythisudichphunthi O 1 displaystyle O 1 ephimetimkkarwiekhraahphaphtwxyangaesdngkarthangankhxngkareriyngladbaebbfxngephuxeriyngladbcaknxyipmak ermtnthangancakthangsayaelaepriybethiybthilakhuaelaslbknthahakphbwatwthangdansaymikhamakkwatwthangdankhwaprasiththiphaph prasiththiphaphkhxngkareriyngladbaebbfxngkhunxyukbtaaehnngkhxngkhxmultang thixyuinraykar hakmikhamakxyutwaerk kareriyngladbaebbfxngcamiprasiththiphaphdi ephraawakarthanganephiyngrxbediywksamarththaihkhamakipxyuintaaehnngthiiklekhiyngkbtaaehnngcringid echnmikhamakthisudxyuintaaehnngaerk karthanganrxbediywkephiyngphxthicalakkhannipxyutaaehnngsudthayid aetklbknhakmikhanxyxyuhlng karthanganhnungrxbcasamartheluxnkhannmadanhnaidephiyngelknxy echnhakkhannepnkhanxythisudkarthanganhnungrxbcaeluxnkhannmadanhnaidephiynghnungtaaehnngethann karprbprungprasiththiphaphkhxngkareriyngladbaebbfxngnnwithikarhnungkkhuxkarthaihkhanxythixyuhlng nnlngmadanhnaiderwkhun nnkhuxhlkkarkhxng sungmikhntxnwithikhlaykareriyngladbaebbfxngmakephiyngaetthanganthngkhaipaelakhaklb khaipnnthanganehmuxnkareriyngladbaebbfxngthukprakar swnkhaklbkephiyngklbdankhxngkareriyngladbaebbfxngnnexng aetkarprbprungdngnikimidthaihprasiththiphaphinkrniaeythisuddikwa O n2 aetxyangid twxyangthilakhntxn kareriyngladbelkh 5 1 4 2 8 inlist caknxyipmak inaetlakhntxntwhnahmaythungtwthikalngthukepriybethiyb rxbthi 1 5 1 4 2 8 displaystyle to 1 5 4 2 8 epriybethiybtwpccubnkbtwthdip slbenuxngcak 5 gt 1 1 5 4 2 8 displaystyle to 1 4 5 2 8 slbenuxngcak 5 gt 4 1 4 5 2 8 displaystyle to 1 4 2 5 8 slbenuxngcak 5 gt 2 1 4 2 5 8 displaystyle to 1 4 2 5 8 imslbephraa 5 immakkwa 8 rxbthi 2 1 4 2 5 8 displaystyle to 1 4 2 5 8 imslbephraa 1 immakkwa 4 1 4 2 5 8 displaystyle to 1 2 4 5 8 slbenuxngcak 4 gt 2 1 2 4 5 8 displaystyle to 1 2 4 5 8 imslbephraa 4 immakkwa 5 1 2 4 5 8 displaystyle to 1 2 4 5 8 imslbephraa 5 immakkwa 8 thungaemwakhxmulinlistcaeriynghmdaelw aetwaktxngtrwcsxbxikkhrnghnung rxbthi 3 1 2 4 5 8 displaystyle to 1 2 4 5 8 imslbephraa 1 immakkwa 2 1 2 4 5 8 displaystyle to 1 2 4 5 8 imslbephraa 2 immakkwa 4 1 2 4 5 8 displaystyle to 1 2 4 5 8 imslbephraa 4 immakkwa 5 1 2 4 5 8 displaystyle to 1 2 4 5 8 imslbephraa 5 immakkwa 8 inrxbniimmikarslb aesdngwaladbelkheriyngcaknxyipmakaelwkarnamaichngantwxyangrhsethiym begin bubbleSort A khux aethwladbthicathukeriyng do thaekhruxnghmaywayngimmikarslb for i 1 to khnadkhxng A 1 if A i 1 gt A i then slb A i 1 kb A i thaekhruxnghmaywamikarslbaelw end if end for until immikarslbaelw end karprbprungprasiththiphaph inkareriyngladbcaknxyipmakesrchnungrxbcathaihkhathimakthisudladbthi i ipxyuintaaehnngthi n 1 dngnncungsamarthmxngkhamtaaehnngthi n 1 inkarthanganrxbtxipid begin bubbleSort A khux aethwladbthicathukeriyng n khnadkhxng A do thaekhruxnghmaywayngimmikarslb for i 1 to n 1 if A i 1 gt A i then slb A i 1 kb A i thaekhruxnghmaywamikarslbaelw end if end for n n 1 until immikarslbaelw endinkarthangancringswnnirxephimetimkhxmul khunsamarthchwyephimkhxmulswnniid caklawidwakareriyngladbaebbfxngnnepnhnunginkhntxnwithikareriyngladbthingaythisudethathieraruck dwy O n2 thaihprasiththiphaphkhxngmnldlngxyangmakaemeraephimcanwnsmachikthicaeriyngephiyngelknxy aemcaepriybethiybkhntxnwithikareriyngladbthimi O n2 dwyknnnkareriyngladbaebbaethrkknbwamiprasiththiphaphdikwainkrnithw ip aetdwykhwamngaykhxngkhntxnwithiaelakhwamngayinkarekhiynthaiheraphbehnkareriyngladbaebbfxngidxyuthwip aelamkcaidepnkhntxnwithikareriyngladbaerk thiphuerimekhiynopraekrmidsuksannexngkareriyngrupaebbxunthiaetktangxxkipswnnirxephimetimkhxmul khunsamarthchwyephimkhxmulswnniidkareriykchuxthiphidswnnirxephimetimkhxmul khunsamarthchwyephimkhxmulswnniidxangxing