การเรียงลำดับการแทรกเป็นเทคนิคที่ทำงานโดยใช้รายการย่อยที่เรียงลำดับแล้ว และเพิ่มค่าจากรายการที่ไม่เรียงลำดับอย่างต่อเนื่อง จนกว่ารายการทั้งหมดจะถูกจัดเรียง
อัลกอริทึมเริ่มต้นด้วยรายการแรกเป็นรายการย่อยที่เรียงลำดับ จากนั้นจะเปรียบเทียบตัวเลขถัดไปกับตัวเลขแรก ถ้ามันมากกว่า มันก็จะแทรกอยู่ในดัชนีแรก มิฉะนั้น จะเหลืออยู่ในดัชนี
ค่าที่สามจะถูกเปรียบเทียบกับอีกสองค่าที่เหลือ จากนั้นจึงใส่ลงในดัชนีที่ถูกต้อง กระบวนการนี้จะดำเนินต่อไปจนกว่าจะจัดเรียงรายการทั้งหมด
ดูการเรียงลำดับการแทรกอย่างใกล้ชิด
คำอธิบายข้างต้นอาจไม่สมเหตุสมผลสำหรับคุณ ตัวอย่างควรช่วยให้คุณเข้าใจได้ดีขึ้นมาก
สมมติว่าคุณมีรายการ: [39, 6, 2, 51, 30, 42, 7].
อัลกอริทึมระบุ 39 เป็นค่าแรกของรายการย่อยที่เรียงลำดับ การประเมินจะไปยังตำแหน่งที่สอง
ที่เกี่ยวข้อง: การเขียนโปรแกรมแบบไดนามิก: ตัวอย่าง ปัญหาทั่วไป และวิธีแก้ไข
จากนั้นนำ 6 มาเปรียบเทียบกับ 39 เนื่องจาก 6 น้อยกว่า 39 จึงใส่ 6 ไว้ในตำแหน่งแรกและ 39 อยู่ในตำแหน่งที่สอง ลำดับรายการใหม่อยู่หลังรอบแรกตอนนี้:
[6, 39, 2, 51, 30, 42, 7]
การประเมินตอนนี้เลื่อนไปที่ตำแหน่งที่สาม 2 ถูกเปรียบเทียบกับตัวเลขสองตัวสุดท้ายแล้วแทรกในตำแหน่งที่ถูกต้อง ลำดับรายการใหม่อยู่หลังรอบที่สองตอนนี้:
[2, 6, 39, 51, 30, 42, 7]
สำหรับรอบที่สาม ลำดับรายการคือ:
[2, 6, 39, 51, 30, 42, 7]
กระบวนการจะทำซ้ำจนกว่าจะจัดเรียงรายการทั้งหมด
ดูแผนภาพด้านล่างที่สรุปการดำเนินการเหล่านี้:
การวิเคราะห์อัลกอริทึม
ความซับซ้อนของเวลาของการเรียงลำดับการแทรกคือ O(n2), เหมือนกับ การเรียงลำดับฟอง . จำนวนการเปรียบเทียบในสถานการณ์กรณีที่เลวร้ายที่สุดคือผลรวมของจำนวนเต็มทั้งหมดตั้งแต่ 1 ถึง (n-1) โดยให้ผลรวมกำลังสอง
การติดตั้งโค้ด
โค้ด Python และ Java ด้านล่างแสดงวิธีใช้งานวิธีการจัดเรียงการแทรก
หลาม:
def insertionSort(mylist):
for step in range(1, len(mylist)):
current_element = mylist[step]
position = step
while position > 0 and mylist[position - 1] > current_element:
mylist[position] = mylist[position - 1]
position = position - 1
mylist[position] = current_element
ชวา:
void insertionSort(int[] myarray) {
int n = myarray.length;
for (int x = 1; x int key = myarray[x];
int y = x-1;
while ( (y > -1) && ( myarray [y] > key ) ) {
myarray [y+1] = myarray [y];
y--;
}
myarray[y+1] = key;
}
}
การเข้ารหัสที่ดีขึ้นด้วย Pseudocode
ตัวอย่างโค้ดข้างต้นมีให้โดยไม่มีรหัสเทียมใดๆ ที่คุณสามารถอ้างอิงเพื่อเขียนอัลกอริทึมนี้ในภาษาอื่นได้ โปรแกรมเมอร์ส่วนใหญ่ (รวมผู้เขียนด้วย) ชอบวิ่งไปที่คีย์บอร์ดหลังจากได้รับแจ้งว่า 'กระซิบ' เกี่ยวกับวิธีการทำงานของโปรแกรม
น่าเสียดายที่แนวทางนี้มีแนวโน้มที่จะเกิดข้อผิดพลาดเนื่องจากตรรกะของโปรแกรมมีความซับซ้อนมากขึ้น คุณต้องการยกระดับเกมการเขียนโปรแกรมของคุณด้วยการเรียนรู้วิธีการใช้ pseudocode อย่างไร?
แบ่งปัน แบ่งปัน ทวีต อีเมล Pseudocode คืออะไรและทำให้คุณเป็นนักพัฒนาที่ดีขึ้นได้อย่างไรดิ้นรนเพื่อเรียนรู้การเขียนโปรแกรม? ทำความเข้าใจกับโค้ดโดยการเรียนรู้ pseudocode แต่ pseudocode คืออะไรและช่วยได้จริงหรือ?
อ่านต่อไป หัวข้อที่เกี่ยวข้อง- การเขียนโปรแกรม
- Java
- Python
- บทเรียนการเข้ารหัส
เจอโรมเป็นพนักงานเขียนบทที่ MakeUseOf เขาครอบคลุมบทความเกี่ยวกับการเขียนโปรแกรมและลินุกซ์ เขายังเป็นคนที่กระตือรือร้นในการเข้ารหัสและคอยติดตามดูอุตสาหกรรม crypto อยู่เสมอ
mac desktop เปิดไม่ติดเพิ่มเติมจาก Jerome Davidson
สมัครรับจดหมายข่าวของเรา
เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!
คลิกที่นี่เพื่อสมัครสมาชิก