ปัญหา
เทคนิคการเรียงลำดับต่างๆ ในภาษาซีมีอะไรบ้าง? อธิบายเทคนิคการจัดเรียงแบบใดแบบหนึ่งพร้อมตัวอย่าง
วิธีแก้ปัญหา
ภาษา C มีเทคนิคการเรียงลำดับห้าแบบ ซึ่งมีดังนี้ -
- การเรียงลำดับฟอง (หรือ) การเรียงลำดับการแลกเปลี่ยน
- การเรียงลำดับการเลือก
- การเรียงลำดับการแทรก (หรือ) การเรียงลำดับเชิงเส้น
- การเรียงลำดับด่วน (หรือ) การเรียงลำดับการแลกเปลี่ยนพาร์ติชั่น
- ผสานการเรียงลำดับ (หรือ) การเรียงลำดับภายนอก
การเรียงบับเบิ้ล
เป็นเทคนิคการเรียงลำดับที่ง่ายที่สุดซึ่งเรียกอีกอย่างว่าการเรียงลำดับการแลกเปลี่ยน
ขั้นตอน
-
เปรียบเทียบองค์ประกอบแรกกับองค์ประกอบที่เหลือในรายการและแลกเปลี่ยน (สลับ) หากไม่ได้เรียงตามลำดับ
-
ทำเช่นเดียวกันกับองค์ประกอบอื่นๆ ในรายการจนกว่าองค์ประกอบทั้งหมดจะถูกจัดเรียง
30 50 40 10 20
พิจารณาองค์ประกอบที่ให้ไว้ด้านล่าง −
รอบแรก
เปรียบเทียบองค์ประกอบแรกกับองค์ประกอบที่เหลือ
a[0]> a[1] $\square$ $\square$30>50 (F) $\square$ $\square$ไม่มีการแลกเปลี่ยน
a[0]> a[2] $\square$ $\square$ 30>40 (F) $\square$ $\square$ ไม่มีการแลกเปลี่ยน
a[0]> a[3] $\square$ $\square$ 30>10 (T) $\square$ $\square$ exchange
a[0]> a[4] $\square$ $\square$ 10>20 (F) $\square$ $\square$ ไม่มีการแลกเปลี่ยน
10 50 40 30 20
รอบสอง
เปรียบเทียบองค์ประกอบที่สองกับองค์ประกอบที่เหลือ
a[1]> a[2] $\square$ $\square$ 50>40 (T) $\square$ $\square$ exchange
a[1]> a[3] $\square$ $\square$ 40>30 (T) $\square$ $\square$ exchange
a[1]> a[4] $\square$ $\square$ 30>20 (T) $\square$ $\square$ exchange
10 20 50 40 30
รอบที่สาม
เปรียบเทียบองค์ประกอบที่สามกับองค์ประกอบที่เหลือ
a[2]> a[3] $\square$ $\square$ 50>40 (T) $\square$ $\square$ exchange
a[2]> a[4] $\square$ $\square$ 40>30 (T) $\square$ $\square$ exchange
10 20 30 50 40
รอบที่สี่
เปรียบเทียบองค์ประกอบที่สี่กับองค์ประกอบที่เหลือ
a[3]> a[4] $\square$ $\square$ 50>40 (T) $\square$ $\square$ exchange
10 20 30 40 50
ขั้นตอน
อ้างถึงขั้นตอนการเรียงลำดับฟองตามที่ระบุด้านล่าง -
for (i=0; i<n-1; i++){ for (j=i+1; j<n; j++){ if (a[i] > a[j]){ t=a[i]; a[i] = a[j]; a[j] = t; } } }
ตัวอย่าง
ต่อไปนี้เป็นโปรแกรม C สำหรับเทคนิคการเรียงลำดับฟอง -
#include<stdio.h> int main(){ int a[50], i,j,n,t; printf("enter the No: of elements in the list:\n"); scanf("%d", &n); printf("enter the elements:\n"); for(i=0; i<n; i++){ scanf ("%d", &a[i]); } printf("Before bubble sorting the elements are:\n"); for(i=0; i<n; i++) printf("%d \t\n", a[i]); for (i=0; i<n-1; i++){ for (j=i+1; j<n; j++){ if (a[i] > a[j]){ t = a[i]; a[i] = a[j]; a[j] = t; } } } printf ("after bubble sorting the elements are:\n"); for (i=0; i<n; i++) printf("%d\t", a[i]); return 0; }
ผลลัพธ์
เมื่อโปรแกรมข้างต้นทำงาน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
enter the No: of elements in the list: 5 enter the elements: 12 11 45 26 67 Before bubble sorting the elements are: 12 11 45 26 67 after bubble sorting the elements are: 11 12 26 45 67