Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

อธิบายเทคนิคการเรียงลำดับอย่างรวดเร็วในภาษา C


การเรียงลำดับเป็นกระบวนการของการจัดเรียงองค์ประกอบทั้งจากน้อยไปมาก (หรือ) จากมากไปหาน้อย

ประเภทของการจัดเรียง

ภาษา C มีเทคนิคการเรียงลำดับห้าแบบ ซึ่งมีดังนี้ -

  • การเรียงลำดับฟอง (หรือ) การเรียงลำดับการแลกเปลี่ยน
  • การเรียงลำดับการเลือก
  • การเรียงลำดับการแทรก(หรือ) การเรียงลำดับเชิงเส้น
  • การเรียงลำดับด่วน (หรือ) การเรียงลำดับการแลกเปลี่ยนพาร์ติชั่น
  • ผสานการเรียงลำดับ (หรือ) การเรียงลำดับภายนอก

เรียงลำดับอย่างรวดเร็ว

เป็นอัลกอริทึมการแบ่งและพิชิต

  • ขั้นตอนที่ 1 − เลือกองค์ประกอบจากอาร์เรย์ เรียกว่าเป็นองค์ประกอบ pivot
  • ขั้นตอนที่ 2 − แบ่งองค์ประกอบอาร์เรย์ที่ไม่เรียงลำดับออกเป็นสองอาร์เรย์
  • ขั้นตอนที่ 3 − หากค่าที่น้อยกว่าองค์ประกอบ pivot อยู่ภายใต้อาร์เรย์ย่อยที่หนึ่ง องค์ประกอบที่เหลือที่มีค่ามากกว่า pivot จะอยู่ในอาร์เรย์ย่อยที่สอง

ลองพิจารณาตัวอย่างด้านล่างซึ่ง

  • P คือองค์ประกอบเดือย
  • L คือตัวชี้ด้านซ้าย
  • R คือตัวชี้ที่ถูกต้อง

องค์ประกอบคือ 6, 3, 7, 2, 4, 5.

อธิบายเทคนิคการเรียงลำดับอย่างรวดเร็วในภาษา C

อธิบายเทคนิคการเรียงลำดับอย่างรวดเร็วในภาษา C

อธิบายเทคนิคการเรียงลำดับอย่างรวดเร็วในภาษา C

อธิบายเทคนิคการเรียงลำดับอย่างรวดเร็วในภาษา C

อธิบายเทคนิคการเรียงลำดับอย่างรวดเร็วในภาษา C

ตอนนี้

  • เดือยอยู่ในตำแหน่งคงที่
  • องค์ประกอบด้านซ้ายทั้งหมดมีค่าน้อยกว่า
  • องค์ประกอบที่เหมาะสมมีค่ามากกว่าจุดหมุน
  • ตอนนี้ แบ่งอาร์เรย์ออกเป็น 2 อาร์เรย์ย่อยด้านซ้ายและด้านขวา
  • นำพาร์ติชั่นด้านซ้ายไปใช้การเรียงลำดับอย่างรวดเร็ว

อธิบายเทคนิคการเรียงลำดับอย่างรวดเร็วในภาษา C

อธิบายเทคนิคการเรียงลำดับอย่างรวดเร็วในภาษา C

ตอนนี้

  • เดือยอยู่ในตำแหน่งคงที่
  • องค์ประกอบด้านซ้ายทั้งหมดมีน้อยและเรียงลำดับ
  • องค์ประกอบที่เหมาะสมนั้นยิ่งใหญ่กว่าและเรียงตามลำดับ
  • รายการที่จัดเรียงขั้นสุดท้ายจะรวมอาร์เรย์ย่อยสองอาร์เรย์เข้าด้วยกันคือ 2, 3, 4, 5, 6, 7

ตัวอย่าง

ต่อไปนี้เป็นโปรแกรม C เพื่อจัดเรียงองค์ประกอบโดยใช้เทคนิคการเรียงลำดับอย่างรวดเร็ว -

#include<stdio.h>
void quicksort(int number[25],int first,int last){
   int i, j, pivot, temp;
   if(first<last){
      pivot=first;
      i=first;
      j=last;
      while(i<j){
         while(number[i]<=number[pivot]&&i<last)
         i++;
         while(number[j]>number[pivot])
         j--;
         if(i<j){
            temp=number[i];
            number[i]=number[j];
            number[j]=temp;
         }
      }
      temp=number[pivot];
      number[pivot]=number[j];
      number[j]=temp;
      quicksort(number,first,j-1);
      quicksort(number,j+1,last);
   }
}
int main(){
   int i, count, number[25];
   printf("How many elements are u going to enter?: ");
   scanf("%d",&count);
   printf("Enter %d elements: ", count);
   for(i=0;i<count;i++)
   scanf("%d",&number[i]);
   quicksort(number,0,count-1);
   printf("Order of Sorted elements: ");
   for(i=0;i<count;i++)
   printf(" %d",number[i]);
   return 0;
}

ผลลัพธ์

เมื่อโปรแกรมข้างต้นทำงาน มันจะสร้างผลลัพธ์ต่อไปนี้ -

How many elements are u going to enter?: 10
Enter 10 elements: 2 3 5 7 1 9 3 8 0 4
Order of Sorted elements: 0 1 2 3 3 4 5 7 8 9