การเรียงลำดับการผสานคืออะไร? Merge sort คืออัลกอริทึมการเรียงลำดับตามการเปรียบเทียบที่อยู่ในหมวดหมู่การแบ่งและการพิชิต การเรียงลำดับการผสานใช้เพื่อจัดเรียงอาร์เรย์ตามกลยุทธ์การแบ่งและพิชิตซึ่งจะกล่าวถึงสั้น ๆ ในโพสต์นี้พร้อมกับแนวคิดอื่น ๆ เช่นอัลกอริทึมพร้อมตัวอย่าง นอกจากนี้เราจะดูความซับซ้อนของเวลาของการเรียงลำดับการผสานใน C ++
คำแนะนำต่อไปนี้จะกล่าวถึงในบทความนี้
- แบ่งและพิชิตอัลกอริทึม
- ทำความเข้าใจเกี่ยวกับ Merge sort Algorithm พร้อมตัวอย่าง
- Pseudocode สำหรับ Merge Sort
- โปรแกรมใน C ++ สำหรับ Merge Sort
- ความซับซ้อนของเวลาสำหรับ Merge Sort
ไปต่อกับบทความนี้ใน Merge Sort ใน C ++
ขั้นตอนวิธีการแบ่งและพิชิต
หากคุณคุ้นเคยกับวิธีการทำงานของ Quicksort แล้วคุณอาจทราบถึงกลยุทธ์การแบ่งและพิชิต Divide and Conquer เกี่ยวข้องกับสามขั้นตอนหลัก ๆ เพื่อทำความเข้าใจขั้นตอนเหล่านี้ให้พิจารณาอาร์เรย์สวัสดี [] ที่มีดัชนีเริ่มต้น 'a' และดัชนีสิ้นสุด 'n' ดังนั้นเราจึงสามารถเขียนอาร์เรย์ของเราได้ด้วยวิธีต่อไปนี้สวัสดี [a & hellip..n]
การแบ่ง - ขั้นตอนสำคัญหรือขั้นตอนสำคัญของการแบ่งและพิชิตคือการแบ่งปัญหาที่กำหนดออกเป็นปัญหาย่อยหรือส่วนย่อย ข้อสังเกตคือปัญหาย่อยควรคล้ายกับปัญหาเดิมและมีขนาดเล็กกว่า ในกรณีของเราเราจะแบ่งอาร์เรย์ของเราออกเป็น 2 ส่วน [a & hellip.m] [m + 1 & hellip..n] m อยู่ตรงกลางของดัชนี a และ n
พิชิต - เมื่อเราแบ่งปัญหาของเราออกเป็นปัญหาย่อยเรียบร้อยแล้ว เราแก้ไขปัญหาย่อยเหล่านี้ซ้ำ ๆ
รวม - ในขั้นตอนนี้เรารวมวิธีแก้ปัญหาย่อยทั้งหมดของเราด้วยวิธีที่เหมาะสม กล่าวอีกนัยหนึ่งคือเรารวมอาร์เรย์ที่เรียงลำดับ 2 อาร์เรย์ที่แตกต่างกันเพื่อสร้างอาร์เรย์ที่เรียงลำดับหนึ่ง เรามีอาร์เรย์เรียงลำดับ
ไปต่อกับบทความนี้ใน Merge Sort ใน C ++
การทำความเข้าใจ Merge Sort Algorithm พร้อมตัวอย่าง
ณ จุดนี้เรารู้ว่าการเรียงลำดับการผสานจะใช้แนวทางใด ลองพิจารณาตัวอย่างและทำแต่ละขั้นตอนตั้งแต่ Hello [] ที่ไม่ได้เรียงลำดับไปจนถึงอาร์เรย์ที่เรียงลำดับ
ตัวอย่าง - สวัสดี [10, 3, 7, 1, 15, 14, 9, 22]
ในภาพด้านบนเราพิจารณาอาร์เรย์ที่ไม่ได้เรียงลำดับและใช้การจัดเรียงแบบผสานเพื่อรับอาร์เรย์ที่เรียงลำดับ ตอนนี้เรามาดูแต่ละขั้นตอนและทำความเข้าใจอัลกอริทึมทั้งหมด
1. อันดับแรกเราพิจารณาอาร์เรย์สวัสดี [10, 3, 7, 1, 15, 14, 9, 22] ในอาร์เรย์นี้มีทั้งหมด 8 องค์ประกอบ
tostring ทำงานอย่างไรใน java
2. ดังที่เราเห็นก่อนหน้านี้การเรียงลำดับการผสานใช้วิธีการแบ่งและพิชิตเพื่อจัดเรียงองค์ประกอบ เราพบ m ซึ่งอยู่ตรงกลางอาร์เรย์ของเราและแบ่งอาร์เรย์ของเราจากตรงกลางโดยที่ m = (a - n) / 2 'a' คือดัชนีขององค์ประกอบทางซ้ายสุดและ n คือดัชนีขององค์ประกอบทางขวาสุดของอาร์เรย์ของเรา .
3. หลังจากการแบ่งส่วนแรกเรามี 2 ส่วนประกอบด้วย 4 องค์ประกอบแต่ละส่วน มาดูครึ่งแรก [10, 3, 7, 1]
4. เราหาร [10, 3, 7, 1] เป็น 2 ส่วน [10, 3] และ [7, 1] หลังจากนั้นให้แบ่งออกเป็น [10], [3], [7], [1] ไม่สามารถหารเพิ่มเติมได้เนื่องจากเราคำนวณม. ไม่ได้ รายการที่มีองค์ประกอบเดียวจะถือว่าเรียงลำดับเสมอ
5. การรวมเกิดขึ้นได้อย่างไร? มาดูกัน [10] แรกและ [3] ถูกเปรียบเทียบและรวมตามลำดับจากน้อยไปมาก [3, 10] ในลักษณะเดียวกับที่เราได้รับ [1, 7]
6. หลังจากนั้นเราจะเปรียบเทียบ [3, 10] และ [1, 7] เมื่อเปรียบเทียบแล้วเราจะรวมมันตามลำดับจากน้อยไปมากและเราจะได้ [1, 3, 7, 10]
7. [15, 14, 9, 2] ยังแบ่งและรวมกันในลักษณะเดียวกันกับรูปแบบ [9, 14, 15, 22]
8. ในขั้นตอนสุดท้ายเราเปรียบเทียบและรวม [15, 14, 9, 2] [9, 14, 15, 22] เพื่อให้เราได้อาร์เรย์ที่จัดเรียงเช่น [1, 3, 7, 9, 10, 14, 15, 22]
ไปต่อกับบทความนี้ใน Merge Sort ใน C ++
Pseudocode สำหรับ Merge Sort
เริ่มต้นหากปล่อยไว้ฟังก์ชัน mergeSort () เรียกตัวเองซ้ำ ๆ เพื่อแบ่งอาร์เรย์ของเราจนกว่าจะกลายเป็นองค์ประกอบเดียวและฟังก์ชัน merge () จะใช้เพื่อผสานอาร์เรย์ที่เรียงลำดับ
ไปต่อกับบทความนี้ใน Merge Sort ใน C ++
ผสานโปรแกรมการเรียงลำดับใน C ++
#include #include #include โดยใช้ namespace std void merge (int a [], int Firstindex, int m, int Lastindex) // ผสานอาร์เรย์ย่อยที่สร้างขึ้นในขณะที่หารเป็นโมฆะ mergeSort (int a [], int Firstindex, int Lastindex) {if (Firstindexsize int สวัสดี [size] ฉัน cout<<'Enter the elements of the array one by one:n' for(i=0 i>สวัสดี [i] mergeSort (สวัสดี 0 ขนาด - 1) cout<<'The Sorted List isn' for(i=0 i เอาท์พุท -
เธรด daemon คืออะไรไปต่อกับบทความนี้ใน Merge Sort ใน C ++
ความซับซ้อนของเวลา
ความซับซ้อนของเวลาเป็นสิ่งสำคัญที่ต้องพิจารณาเมื่อเราพูดถึงอัลกอริทึม การเรียงลำดับการผสานถือว่ามีความซับซ้อนของเวลามากเมื่อเทียบกับอัลกอริทึมการเรียงลำดับอื่น ๆ
เวลาทำงานที่เลวร้ายที่สุด - O (n log n)
เวลาทำงานที่ดีที่สุด - O (n log n)
เวลาทำงานโดยเฉลี่ย - O (n log n)ด้วยเหตุนี้เราจึงมาถึงจุดสิ้นสุดของบทความ Merge Sort ใน C ++ หากคุณต้องการเรียนรู้เพิ่มเติมโปรดดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ได้รับการออกแบบมาเพื่อฝึกอบรมคุณสำหรับแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & Spring
มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อกนี้และเราจะติดต่อกลับโดยเร็วที่สุด