ในสาขาวิทยาการคอมพิวเตอร์ การเรียงลำดับแบบผสาน (อังกฤษ: Merge Sort) เป็นขั้นตอนวิธีในการเรียงลำดับที่อาศัยการเปรียบเทียบ และยังเป็นตัวอย่างขั้นตอนวิธีที่ใช้หลักการแบ่งแยกและเอาชนะทำให้ขั้นตอนวิธีนี้มีประสิทธิภาพ O(n log n) ในการอิมพลิเมนต์เพื่อการใช้งานจริง ๆ นั้นสามารถทำได้ทั้งแบบบนลงล่าง (Top-down) และแบบล่างขึ้นบน (Bottom-up) อนึ่งในการอิมพลิเมนต์โดยทั่วไปแล้วการเรียงแบบนี้จะไม่สูญเสียลำดับของข้อมูลที่มีค่าเท่ากัน นั่นคือเป็นการเรียงที่เสถียร การเรียงลำดับแบบผสาน ถูกเสนอขึ้นครั้งแรกโดยจอห์น ฟอน นอยมันน์ในปี ค.ศ. 1945
ภาพตัวอย่างการเรียงลำดับแบบผสาน เร่มด้วยการแบ่งข้อมูลออกเป็นส่วนที่เล็กที่สุด แล้วเร่มผสานข้อมูลก้อนเล็ก ๆ เข้าด้วยกันกลายเป็นข้อมูลก้อนที่ใหญ่ขึ้น ในที่สุดข้อมูลทุกชิ้นจะเรียงลำดับอย่างสมบูรณ์ | |
ประเภท | ขั้นตอนวิธีการเรียงลำดับ |
---|---|
โครงสร้างข้อมูล | แถวลำดับ (Array) |
ประสิทธิภาพเมื่อเกิดกรณีแย่ที่สุด | O(n log n) |
ประสิทธิภาพเมื่อเกิดกรณีดีที่สุด | O(n log n) โดยทั่วไป O(n) เมื่อใส่เงื่อนไขพิเศษ |
ประสิทธิภาพเมื่อเกิดกรณีทั่วไป | O(n log n) |
ปริมาณความต้องการพื้นที่เมื่อเกิดกรณีแย่ที่สุด | O(n) รวมทั้งแถวลำดับที่ช่วยในการเรียงอีกเท่าตัว |
ขั้นตอนวิธี
ขั้นตอนวิธีอาศัยหลักการแบ่งแยกและเอาชนะและการเวียนบังเกิด โดยมีรายละเอียดดังนี้
- (ขั้นตอนการแบ่ง) สมมติว่ามีข้อมูลอยู่ n ชุด
- ถ้ามีข้อมูลแค่ 1 ชุด นั่นคือข้อมูลนั้นเรียงลำดับแล้ว
- ถ้ามีข้อมูลมากกว่านั้น ให้แบ่งเป็นสองส่วน แล้วทำ
- (ขั้นตอนเอาชนะ) เมื่อถึงขั้นตอนนี้จะได้ข้อมูลสองส่วน (โดยที่แต่ละส่วนเรียงในส่วนของตัวเองเรียบร้อยแล้ว) ทำการรวมข้อมูลทั้งสองส่วนนั้นให้เป็นข้อมูลก้อนเดียวที่ทั้งก้อนนั้นเรียงลำดับแล้ว
ตัวอย่างการอิมพลิเมนต์ด้วยรหัสเทียม ทำการเรียงลำดับด้วยการโยนลิสต์ข้อมูลไปที่ฟังก์ชัน MergeSort ผลลัพธ์ที่ออกจากฟังก์ชันนั้นคือข้อมูลที่เรียงลำดับแล้ว
MergeSort (array Assss) { if (A.size == 0) return A mid = A.size / 2 AA = MergeSort(A[0..mid]) BB = MergeSort(A[mid..A.size]) return MergeSort_Merge(AA, BB) } MergeSort_Merge (array A, array B) { C = new array aa = 0 bb = 0 while (aa < A.size and bb < B.size) { if (A[aa] < B[bb]) { C[] = A[aa++] } else if (A[aa] > B[bb]) { C[] = B[bb++] } else { aa += 1 bb += 1 } } while (aa < A.size) C[] = A[aa++] while (bb < B.size) C[] = B[bb++] return C }
เชิงวิเคราะห์
ในการเรียงลำดับข้อมูลทั้งสิ้น n ชุด การเรียงลำดับแบบผสาน มีประสิทธิภาพในกรณีดีที่สุด (โดยมิได้ใส่เงื่อนไขพิเศษ) กรณีเฉลี่ย และกรณีแย่สุด เท่ากันคือ O(n log n) โดยจะแสดงให้ดูดังนี้ สมมติให้เวลาที่ใช้ในการเรียงข้อมูล n ชุด แทนด้วย T(n) เนื่องจาก การเรียงลำดับแบบผสาน มีสองขั้นตอนโดยขั้นแรกคือการแบ่งเป็นสองส่วนซึ่งสามารถทำได้ในเวลาคงที่แต่จะต้องเวียงบังเกิดเรียกตัวเองลงไปแก้ปัญหาที่เล็กลงครึ่งหนื่งสองปัญหา จะได้ว่าในส่วนแรกใช้เวลา 2T(n/2) และขั้นที่สองซึ่งเป็นการผสานข้อมูลสองชุดที่เล็กกว่า (ที่เรียงในตัวเองแล้ว) เป็นข้อมูลชุดใหญ่จะใช้เวลาอีก n ดังที่ได้แสดงให้ดูในตัวอย่างการอิมพลิเมนต์ด้านบน เมื่อรวมทั้งสองขั้นแล้วจะใช้เวลาทั้งสิ้น T(n) = 2T(n/2) + n หากใช้ ในการวิเคราะห์สมการนี้จะได้ผลลัพทธ์เป็น O(n log n) ดังที่ได้กล่าวไว้
อ้างอิง
- Knuth (1998, p. 158)
บรรณานุกรม
- Knuth, Donald (1998). "Section 5.2.4: Sorting by Merging". Sorting and Searching. . Vol. 3 (2nd ed.). Addison-Wesley. pp. 158–168. ISBN .
{{}}
:|ref=harv
ไม่ถูกต้อง ((help))
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
insakhawithyakarkhxmphiwetxr kareriyngladbaebbphsan xngkvs Merge Sort epnkhntxnwithiinkareriyngladbthixasykarepriybethiyb aelayngepntwxyangkhntxnwithithiichhlkkaraebngaeykaelaexachnathaihkhntxnwithinimiprasiththiphaph O n log n inkarximphliemntephuxkarichngancring nnsamarththaidthngaebbbnlnglang Top down aelaaebblangkhunbn Bottom up xnunginkarximphliemntodythwipaelwkareriyngaebbnicaimsuyesiyladbkhxngkhxmulthimikhaethakn nnkhuxepnkareriyngthiesthiyr kareriyngladbaebbphsan thukesnxkhunkhrngaerkodycxhn fxn nxymnninpi kh s 1945kareriyngladbaebbphsanphaphtwxyangkareriyngladbaebbphsan ermdwykaraebngkhxmulxxkepnswnthielkthisud aelwermphsankhxmulkxnelk ekhadwyknklayepnkhxmulkxnthiihykhun inthisudkhxmulthukchincaeriyngladbxyangsmburnpraephthkhntxnwithikareriyngladbokhrngsrangkhxmulaethwladb Array prasiththiphaphemuxekidkrniaeythisudO n log n prasiththiphaphemuxekidkrnidithisudO n log n odythwip O n emuxisenguxnikhphiessprasiththiphaphemuxekidkrnithwipO n log n primankhwamtxngkarphunthiemuxekidkrniaeythisudO n rwmthngaethwladbthichwyinkareriyngxikethatwkkhntxnwithikhntxnwithixasyhlkkaraebngaeykaelaexachnaaelakarewiynbngekid odymiraylaexiyddngni khntxnkaraebng smmtiwamikhxmulxyu n chud thamikhxmulaekh 1 chud nnkhuxkhxmulnneriyngladbaelw thamikhxmulmakkwann ihaebngepnsxngswn aelwtha khntxnexachna emuxthungkhntxnnicaidkhxmulsxngswn odythiaetlaswneriynginswnkhxngtwexngeriybrxyaelw thakarrwmkhxmulthngsxngswnnnihepnkhxmulkxnediywthithngkxnnneriyngladbaelw twxyangkarximphliemntdwyrhsethiym thakareriyngladbdwykaroynlistkhxmulipthifngkchn MergeSort phllphththixxkcakfngkchnnnkhuxkhxmulthieriyngladbaelw MergeSort array Assss if A size 0 return A mid A size 2 AA MergeSort A 0 mid BB MergeSort A mid A size return MergeSort Merge AA BB MergeSort Merge array A array B C new array aa 0 bb 0 while aa lt A size and bb lt B size if A aa lt B bb C A aa else if A aa gt B bb C B bb else aa 1 bb 1 while aa lt A size C A aa while bb lt B size C B bb return C echingwiekhraahphaphaesdngkareriyngladbaethwladb 7 twdwywithikarphsan aebbbnlnglang inkareriyngladbkhxmulthngsin n chud kareriyngladbaebbphsan miprasiththiphaphinkrnidithisud odymiidisenguxnikhphiess krniechliy aelakrniaeysud ethaknkhux O n log n odycaaesdngihdudngni smmtiihewlathiichinkareriyngkhxmul n chud aethndwy T n enuxngcak kareriyngladbaebbphsan misxngkhntxnodykhnaerkkhuxkaraebngepnsxngswnsungsamarththaidinewlakhngthiaetcatxngewiyngbngekideriyktwexnglngipaekpyhathielklngkhrunghnungsxngpyha caidwainswnaerkichewla 2T n 2 aelakhnthisxngsungepnkarphsankhxmulsxngchudthielkkwa thieriyngintwexngaelw epnkhxmulchudihycaichewlaxik n dngthiidaesdngihduintwxyangkarximphliemntdanbn emuxrwmthngsxngkhnaelwcaichewlathngsin T n 2T n 2 n hakich inkarwiekhraahsmkarnicaidphllphththepn O n log n dngthiidklawiwxangxingKnuth 1998 p 158 brrnanukrmKnuth Donald 1998 Section 5 2 4 Sorting by Merging Sorting and Searching Vol 3 2nd ed Addison Wesley pp 158 168 ISBN 0 201 89685 0 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite book title aemaebb Cite book cite book a ref harv imthuktxng help