การเรียงลำดับการเลือกเป็นการจู่โจมอัลกอริธึมที่ทำงานโดยซื้อการค้นหาตัวเลขที่น้อยที่สุดจากอาร์เรย์แล้ววางลงในตำแหน่งแรก อาร์เรย์ถัดไปที่จะข้ามผ่านจะเริ่มจากดัชนีถัดจากตำแหน่งที่วางตัวเลขที่น้อยที่สุด
มาดูตัวอย่างเพื่อทำให้แนวคิดนี้ชัดเจนยิ่งขึ้น
เรามีอาร์เรย์ {6, 3, 8, 12, 9} ในอาร์เรย์นี้ องค์ประกอบที่เล็กที่สุดคือ 3 ดังนั้นเราจะวาง 3 ไว้ที่ตำแหน่งแรก หลังจากนี้อาร์เรย์จะมีลักษณะดังนี้ {3, 6, 8, 12, 9}. ตอนนี้เราจะพบจำนวนที่น้อยที่สุดอีกครั้ง แต่คราวนี้เราจะไม่พิจารณา 3 ในการค้นหาของเราเพราะมันมาแทนที่ ค้นหาองค์ประกอบที่เล็กที่สุดถัดไปคือ 6 สร้างอาร์เรย์ที่มี 6 ที่ตำแหน่งที่สอง จากนั้นค้นหาอีกครั้งในอาร์เรย์จนกระทั่งจัดเรียงอาร์เรย์
การทำงานของอัลกอริธึมการจัดเรียง -
ขั้นตอนต่อไปนี้ตามด้วยอัลกอริธึมการเรียงลำดับการเลือก
ลองหาอาร์เรย์ {20, 12 , 23, 55 ,21}
-
ตั้งค่าองค์ประกอบแรกของอาร์เรย์เป็นค่าต่ำสุด
ขั้นต่ำ =20
-
เปรียบเทียบค่าต่ำสุดกับองค์ประกอบถัดไป หากน้อยกว่าค่าต่ำสุด ให้กำหนดองค์ประกอบนี้เป็นค่าต่ำสุด ทำสิ่งนี้จนจบอาร์เรย์
เปรียบเทียบกับ 12 :20> 12 , ขั้นต่ำ =12
เปรียบเทียบกับ 23 :12 <23 , ขั้นต่ำ =12
เปรียบเทียบกับ 55 :12 <55 , ขั้นต่ำ =12
เปรียบเทียบกับ 21 :12 <21 , ขั้นต่ำ =12
-
วางค่าต่ำสุดที่ตำแหน่งแรก (ดัชนี 0) ของอาร์เรย์
อาร์เรย์ ={12, 20 ,23, 55, 21}
-
สำหรับการทำซ้ำครั้งต่อไป ให้เริ่มเรียงลำดับจากองค์ประกอบที่ไม่ได้เรียงลำดับแรก นั่นคือ องค์ประกอบที่อยู่ถัดจากตำแหน่งต่ำสุดที่วางไว้
อาร์เรย์ ={12, 20 ,23, 55, 21}
การค้นหาเริ่มจาก 20 องค์ประกอบถัดไปที่วางขั้นต่ำ
ทำซ้ำ 2 :
ขั้นต่ำ =20
เปรียบเทียบกับ 23 :20 <23 , ขั้นต่ำ =20
เปรียบเทียบกับ 55 :20 <55 , ขั้นต่ำ =20
เปรียบเทียบกับ 21 :20 <21 , ขั้นต่ำ =20
ขั้นต่ำในสถานที่ไม่มีการเปลี่ยนแปลง
อาร์เรย์ ={12, 20 ,23, 55, 21}
ทำซ้ำ 3 :
ขั้นต่ำ =23
เปรียบเทียบกับ 55 :23 <55 , ขั้นต่ำ =23
เปรียบเทียบกับ 21 :23> 21 , ขั้นต่ำ =21
ย้ายขั้นต่ำไปที่ดัชนี =2
อาร์เรย์ ={12, 20, 21, 55, 23}
ทำซ้ำ 4 :
ขั้นต่ำ =55
เปรียบเทียบกับ 23 :23 <55 , ขั้นต่ำ =23
ย้ายขั้นต่ำในดัชนี 3Array ={12, 20, 21, 23, 55}
ตัวอย่าง
#include <stdio.h> int main() { int arr[10]={6,12,0,18,11,99,55,45,34,2}; int n=10; int i, j, position, swap; for (i = 0; i < (n - 1); i++) { position = i; for (j = i + 1; j < n; j++) { if (arr[position] > arr[j]) position = j; } if (position != i) { swap = arr[i]; arr[i] = arr[position]; arr[position] = swap; } } for (i = 0; i < n; i++) printf("%d\t", arr[i]); return 0; }
ผลลัพธ์
0 2 6 11 12 18 34 45 55 99