Insertion Sort เป็นอัลกอริธึมการจัดเรียงที่ทำงานโดยการแบ่งข้อมูลเป็นสองส่วน: ส่วนที่ถูกจัดเรียงแล้ว และส่วนที่ยังไม่ได้จัดเรียง จากนั้นจะค่อยๆ เลือกแต่ละค่าจากส่วนที่ยังไม่ได้จัดเรียงมาใส่ในตำแหน่งที่เหมาะสมในส่วนที่ถูกจัดเรียงให้เรียบร้อย
หลักการทำงาน
1. เริ่มจากมองว่าชิ้นแรกในอาร์เรย์ถูกจัดเรียงไว้
2. จากนั้นเลือกค่าต่อไปในอาร์เรย์ (ที่ยังไม่ถูกจัดเรียง)
3. เปรียบเทียบค่าที่เลือกกับค่าที่อยู่ในส่วนที่ถูกจัดเรียง
4. ถ้าค่าที่เลือกเล็กกว่าค่าที่อยู่ในส่วนที่จัดเรียง ก็จะทำการเลื่อนค่าที่อยู่ในส่วนที่จัดเรียง เพื่อเปิดทางให้ค่าที่เลือกเดินเข้าไปยังตำแหน่งที่เหมาะสม
5. ทำแบบนี้ไปเรื่อย ๆ จนค่าทั้งหมดถูกจัดเรียง
อัลกอริธึมนี้มักถูกนำมาใช้ในกรณีที่ข้อมูลมีขนาดเล็กหรือเมื่อมันถูกจัดเรียงในลำดับที่ใกล้เคียงกับที่ต้องการอยู่แล้ว ตัวอย่างเช่น ในการจัดเรียงข้อมูลรอบแรกก่อนที่จะใช้ในการวิเคราะห์ต่อไป
Use Case: การจัดเรียงคะแนนสอบ
ลองนึกภาพถึงห้องเรียนที่มีการสอบของนักเรียนหลายคน คะแนนสอบเหล่านั้นถูกบันทึกไว้ในอาร์เรย์ การใช้ Insertion Sort จะช่วยให้คุณสามารถจัดเรียงคะแนนสอบตามลำดับจากน้อยไปหามากได้อย่างรวดเร็ว โดยเฉพาะถ้าคะแนนนั้นอยู่ในลำดับที่ใกล้เคียงกับที่ต้องการอยู่แล้ว
ด้านล่างนี้คือโค้ดตัวอย่างสำหรับ Insertion Sort ที่เขียนด้วยภาษา Julia:
ในโค้ดนี้ เราจะสร้างฟังก์ชัน `insertion_sort` ที่รับอาร์เรย์ และจะทำการเรียงอาร์เรย์นั้นโดยอิงจากหลักการของ Insertion Sort
การวิเคราะห์ความซับซ้อนของ Insertion Sort มีดังนี้:
- Best-case Complexity: O(n) — เมื่ออาร์เรย์นั้นถูกจัดเรียงแล้ว - Average-case Complexity: O(n^2) — เมื่ออาร์เรย์เป็นแบบสุ่ม - Worst-case Complexity: O(n^2) — เมื่ออาร์เรย์ถูกจัดเรียงในลำดับย้อนกลับในภาพรวม Insertion Sort แสดงถึงประสิทธิภาพที่ดีในกรณีที่ข้อมูลมีขนาดเล็ก หรือที่อาร์เรย์ถูกจัดเรียงแล้วเป็นส่วนๆ
ข้อดี:
- เข้าใจง่าย: เนื่องจากหลักการทำงานที่ชัดเจน - ประสิทธิภาพสูงในขนาดเล็ก: ทำงานได้ดีเมื่อข้อมูลมีขนาดเล็กหรือเกือบจะถูกจัดเรียงแล้ว - Stable Sort: เก็บค่าที่เหมือนกันไว้ในลำดับเดิมข้อเสีย:
- ช้าสำหรับข้อมูลขนาดใหญ่: O(n^2) ทำให้ไม่เหมาะสำหรับข้อมูลที่มีขนาดใหญ่ - ไม่ได้เป็นการจัดเรียงที่ดีที่สุดในกรณีทั่วไป: มีอัลกอริธึมการจัดเรียงที่ดีกว่าในหลายกรณี เช่น Quick Sort และ Merge Sort
Insertion Sort เป็นการจัดเรียงที่มีประโยชน์ในหลายกรณี โดยเฉพาะเมื่อใช้กับข้อมูลจำนวนเล็กๆ หรือข้อมูลที่มีลำดับใกล้เคียงกันแล้ว อัลกอริธึมนี้มีความเข้าใจง่ายและสามารถประยุกต์ใช้ในงานเดียวกันได้
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโค้ดและอัลกอริธึมต่างๆ เราขอเชิญคุณมาร่วมเรียนรู้ที่ Expert-Programming-Tutor (EPT) ที่นี่คุณจะได้พบกับการสอนที่เข้าใจง่าย และสามารถพัฒนาความสามารถในการเขียนโปรแกรมของคุณให้ดียิ่งขึ้น!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM