Merge Sort Program ใน Java: ความแตกต่างระหว่างการ Merge Sort & Quicksort
เผยแพร่แล้ว: 2021-05-25สารบัญ
บทนำสู่โปรแกรม Merge Sort ใน JAVA
ตามชื่อที่แนะนำ โปรแกรม merge sort ใน JAVA เป็นอัลกอริธึมการเรียงลำดับ มีการกำหนดแนวคิดแบบคลาสสิกว่าเป็นอัลกอริธึมการแบ่งและพิชิตใน JAVA โปรแกรมการจัดเรียงแบบผสานใน Java ทำงานโดยแยกอาร์เรย์อินพุตแบบเรียกซ้ำออกเป็นสองปัญหาย่อยที่เป็นส่วนประกอบ จนกว่าจะง่ายพอที่จะแก้ไขโดยตรง
ปัญหาย่อยที่เป็นส่วนประกอบอาจคล้ายกันหรือค่อนข้างเกี่ยวข้องกับปัญหาหลัก การแก้ปัญหาแต่ละอย่างของแต่ละปัญหาย่อยจะถูกรวมเข้าด้วยกันเพื่อบรรลุแนวทางแก้ไขปัญหาหลักเดิม
โปรแกรม Merge Sort ใน Java ทำงานอย่างไร
ดังที่กล่าวไว้ก่อนหน้านี้ โปรแกรมการจัดเรียงแบบผสานใน JAVA เป็นอัลกอริธึมการแบ่งและพิชิต เป็นการจัดเรียงที่เสถียร ซึ่งหมายความว่าองค์ประกอบอาร์เรย์จะรักษาตำแหน่งเดิมที่สัมพันธ์กันตลอดกระบวนการเรียงลำดับ
- หาร: ในขั้นตอนนี้ อาร์เรย์อินพุตจะถูกแบ่งออกเป็นสองส่วนที่เป็นส่วนประกอบ ขั้นตอนนี้จะถูกทำซ้ำอย่างต่อเนื่องสำหรับครึ่งอาร์เรย์ที่เป็นผลลัพธ์ทั้งหมด จนกว่าจะไม่มีอีกครึ่งอาร์เรย์ที่จะแบ่งเพิ่มเติม
- Conquer: ในขั้นตอนนี้ อาร์เรย์ที่ถูกแบ่งจะถูกจัดเรียงและรวมจากล่างขึ้นบนเพื่อไปยังอาร์เรย์ที่จัดเรียงขั้นสุดท้าย
ความแตกต่างระหว่างโปรแกรม Quicksort และ Merge Sort ใน Java
แม้ว่าการทำงานจะคล้ายคลึงกัน แต่ต้องเน้นที่ความแตกต่างพื้นฐานระหว่าง quicksort และ mergesort ใน JAVA
- กลไก : Quicksort เป็นอัลกอริธึมการจัดเรียงแบบแทนที่ภายใน ในขณะที่ mergesort เป็นอัลกอริธึมการจัดเรียงภายนอกที่ไม่อยู่ในสถานที่ ใน Quicksort องค์ประกอบจะถูกจัดเรียงตามองค์ประกอบหลักที่เรียกว่าเดือย โดยทั่วไปเดือยจะเป็นค่ากลางในอาร์เรย์อินพุต องค์ประกอบที่มีค่าน้อยกว่าเดือยจะถูกผลักไปทางด้านซ้ายของเดือย ในขณะที่องค์ประกอบที่มีค่ามากกว่าไปทางขวาของเดือย ในที่นี้ ด้านซ้ายเรียกว่าพาร์ติชันด้านซ้าย และด้านขวาเรียกว่าพาร์ติชันด้านขวา ในทางตรงกันข้าม Mergesort จะแยกอาร์เรย์ออกเป็นสองอาร์เรย์ย่อย (n/2) ซ้ำๆ จนกว่าจะเหลือเพียงองค์ประกอบเดียว จากนั้นจะรวมอาร์เรย์ย่อยเพื่อสร้างอาร์เรย์ที่จัดเรียง
- แอปพลิเคชัน: แม้ว่า quicksort จะเหมาะสำหรับอาร์เรย์ขนาดเล็ก แต่ mergesort ก็สามารถทำงานร่วมกับอาร์เรย์ใดก็ได้ โดยไม่คำนึงถึงขนาดของอาร์เรย์
- ความเร็ว : ในกรณีของ quicksort ยิ่งชุดข้อมูลมีขนาดเล็ก อัลกอริทึมก็จะยิ่งเร็วขึ้น ในทางกลับกัน Mergesort ทำงานด้วยความเร็วที่สม่ำเสมอสำหรับชุดข้อมูลทั้งหมด
- ความต้องการพื้นที่และการใช้หน่วยความจำ: ดังที่ได้กล่าวไว้ก่อนหน้านี้ mergesort เป็นอัลกอริธึมการจัดเรียงภายนอกที่ไม่อยู่ในสถานที่ ความซับซ้อนของพื้นที่คือ O (n) ดังนั้นจึงต้องการพื้นที่จัดเก็บเพิ่มเติมของ (O (n)) เพื่อจัดเรียงอาร์เรย์เสริม
อ่านเพิ่มเติม: ประเภทของตัวอักษรใน Java พร้อมตัวอย่าง
การวิเคราะห์ความซับซ้อนของเวลาของโปรแกรม Merge Sort ใน JAVA
โปรแกรมการจัดเรียงแบบผสานใน JAVA มีความซับซ้อนของเวลาเป็น O (n*log n) ตาม Binary Search เมื่อใดก็ตามที่ตัวเลขถูกแบ่งออกเป็นครึ่งหนึ่งในทุกขั้นตอน สามารถแสดงด้วยฟังก์ชันลอการิทึม 'log n' จำนวนขั้นตอน (อย่างมากที่สุด) สามารถแสดงได้โดยบันทึก n +1 กึ่งกลางของอาร์เรย์ย่อยใดๆ คือ O (1)
ดังนั้น ในการผสานอาร์เรย์ย่อย จะต้องใช้เวลาในการทำงานเป็น O (n) ดังนั้น เวลาทั้งหมดสำหรับโปรแกรมการจัดเรียงแบบผสานใน JAVA จะกลายเป็น n (log n +1) จำนวนนี้นับเป็นความซับซ้อนของเวลาของ O (n*log n) ในทั้งสามกรณี (แย่ที่สุด ปานกลาง และดีที่สุด) เนื่องจากการจัดเรียงการผสานจะใช้เวลาเชิงเส้นในการรวมสองส่วนเข้าด้วยกันเสมอ
เรียนรู้ หลักสูตรซอฟต์แวร์ออนไลน์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
สรุป
เช่นเดียวกับข้อมูลที่จัดเรียงสำหรับมนุษย์นั้นมีเหตุผลและเข้าใจได้ง่ายขึ้น อาร์เรย์ที่จัดเรียงนั้นสามารถจัดการได้มากกว่าสำหรับคอมพิวเตอร์ที่จะทำงานด้วย นี่คือจุดที่โปรแกรมการเรียงลำดับผสานใน JAVA พิสูจน์ว่าได้เปรียบ เป็นอัลกอริธึมการเรียงลำดับตามการเปรียบเทียบที่มีประสิทธิภาพ วัตถุประสงค์ทั่วไป
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Java การพัฒนาซอฟต์แวร์แบบฟูลสแตก โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์แบบครบวงจร ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9+ โครงการและการมอบหมาย สถานะศิษย์เก่า IIIT-B โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับบริษัทชั้นนำ
การเรียงลำดับในการเขียนโปรแกรมคืออะไร?
การเรียงลำดับเป็นเทคนิคในการจัดวางวัตถุในลำดับเฉพาะ โดยปกติจะทำเพื่อให้จัดการได้มากขึ้น หรือเพื่อให้เข้าถึงได้ง่ายขึ้น ในวิทยาการคอมพิวเตอร์ เรามีอัลกอริธึมการเรียงลำดับสำหรับโครงสร้างข้อมูล อัลกอริทึมการเรียงลำดับเหล่านี้สามารถแบ่งออกเป็นสองประเภท หนึ่งคืออัลกอริธึมการเรียงลำดับตามการเปรียบเทียบและอีกอันคืออัลกอริธึมการเรียงลำดับตามการแทรก ในอัลกอริธึมการจัดเรียงแบบเปรียบเทียบ องค์ประกอบจะถูกเปรียบเทียบกับองค์ประกอบอื่นเพื่อค้นหาคีย์การจัดเรียงที่ตรงกัน ซึ่งเป็นคีย์เดียวที่ใช้ร่วมกันระหว่างองค์ประกอบเหล่านี้ ในอัลกอริธึมการจัดเรียงแบบอิงการแทรก องค์ประกอบใหม่จะถูกเพิ่มที่ด้านหน้าของอาร์เรย์ และองค์ประกอบที่อยู่ท้ายสุดจะถูกเลื่อนไปที่จุดเริ่มต้น
ประเภทของอัลกอริธึมการเรียงลำดับในการเขียนโปรแกรมมีกี่ประเภท?
อัลกอริทึมการเรียงลำดับส่วนใหญ่แบ่งออกเป็น 3 ประเภท: การเรียงลำดับตามลำดับ การเรียงลำดับแบบขนาน การเรียงลำดับการแบ่งพาร์ติชัน การเรียงลำดับตามลำดับจะเข้าใจได้ง่ายที่สุด เป็นสิ่งที่เราใช้เมื่อเราเรียงลำดับในหัวของเรา ทุกอย่างเรียงจากน้อยไปมาก อัลกอริธึมการเรียงลำดับแบบต่อเนื่องที่พบบ่อยที่สุดคือการเรียงลำดับการแทรก การเรียงลำดับแบบฟอง การเรียงลำดับแบบรวดเร็ว และการเรียงลำดับแบบรวม อัลกอริธึมการเรียงลำดับทั้งหมดเหล่านี้สามารถขนานกันได้อย่างง่ายดาย ในกรณีของการเรียงลำดับแบบขนาน งานแต่ละงานขึ้นอยู่กับผลลัพธ์ของงานก่อนหน้า ดังนั้นจึงไม่รับประกันลำดับของผลลัพธ์ อัลกอริธึมการเรียงลำดับแบบขนานสองแบบที่ใช้คือการเรียงลำดับทอพอโลยีและการรวมจากล่างขึ้นบน อัลกอริธึมการเรียงลำดับพาร์ทิชันพยายามแบ่งพาร์ติชั่นอาร์เรย์อินพุตเพื่อให้สามารถเรียงลำดับแต่ละ subarray แยกกันได้ อัลกอริธึมการเรียงลำดับพาร์ทิชันประกอบด้วยการค้นหาแบบไบนารี การโยง การเรียงลำดับฮีป และการเรียงลำดับฐาน
การเรียงลำดับการผสานและการเรียงลำดับอย่างรวดเร็วแตกต่างกันอย่างไร
Merge sort คืออัลกอริธึมการแบ่งและพิชิต มันแบ่งรายการออกเป็นสองพาร์ติชั่นตามรายการเดือยบางรายการ เรียงลำดับแต่ละพาร์ติชั่นซ้ำ ๆ แล้วรวมเอาท์พุต ขั้นตอนการผสานสามารถทำได้ด้วยการเรียงลำดับการผสานแบบขนาน การเรียงลำดับอย่างรวดเร็วคืออัลกอริธึมการเรียงลำดับ O(nlogn) เป็นอัลกอริธึมที่ง่ายกว่ามาก แต่ต้องหมุนองค์ประกอบอาร์เรย์แบบสุ่มในแต่ละครั้ง