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

โปรแกรม C เพื่อจัดเรียงอาร์เรย์โดยใช้การผสาน sort


อาร์เรย์คือกลุ่มของรายการข้อมูลที่เกี่ยวข้องกันซึ่งเป็นชื่อสามัญร่วมกัน ค่าเฉพาะในอาร์เรย์จะถูกระบุด้วยความช่วยเหลือของ "หมายเลขดัชนี"

การประกาศอาร์เรย์

ไวยากรณ์สำหรับการประกาศอาร์เรย์มีดังนี้ −

datatype array_name [size];

ตัวอย่างเช่น

float marks [50]

มันประกาศ 'เครื่องหมาย' เป็นอาร์เรย์ที่มีองค์ประกอบลอย 50 รายการ

int number[10]

มันประกาศ 'ตัวเลข' เป็นอาร์เรย์ที่ประกอบด้วยค่าคงที่จำนวนเต็มสูงสุด 10 ค่า

แต่ละองค์ประกอบถูกระบุโดยใช้ "ดัชนีอาร์เรย์"

การเข้าถึงองค์ประกอบอาร์เรย์ทำได้ง่ายโดยใช้ดัชนีอาร์เรย์

ตรรกะที่เราใช้ในการเรียงลำดับการผสานมีดังนี้ −

void MergeSort(int *array, int left, int right){
   int middle = (left+right)/2;
   if(left<right){
      //Sorting the left part
      MergeSort(array, left, middle);
      //Sorting the right part
      MergeSort(array, middle + 1, right);
      // Merge the two parts
      Merge(array, left, middle, right);
   }
}

ตรรกะในการรวมองค์ประกอบทั้งหมดมีดังนี้ -

void Merge(int *array, int left, int middle, int right){
   int tmp[right - left + 1];
   int pos = 0, leftposition = left, rightposition = middle + 1;
   while (leftposition <= middle && rightposition <= right){
      if (array[leftposition] < array[rightposition]){
         tmp[pos++] = array[leftposition++];
      }else{
         tmp[pos++] = array[rightposition++];
      }
   }
   while (leftposition <= middle)
      tmp[pos++] = array[leftposition++];
   while (rightposition <= right)
      tmp[pos++] = array[rightposition++];
   int i;
   for (i = 0; i < pos; i++){
      array[i + left] = tmp[i];
   }
   return;
}

โปรแกรม

ต่อไปนี้เป็นโปรแกรม C เพื่อรวมการเรียงลำดับ -

#include <stdio.h>
void Merge(int * , int , int , int );
void MergeSort(int *array, int left, int right){
   int middle = (left+right)/2;
   if(left<right){
      //Sorting the left part
      MergeSort(array, left, middle);
      //Sorting the right part
      MergeSort(array, middle + 1, right);
      // Merge the two parts
      Merge(array, left, middle, right);
   }
}
void Merge(int *array, int left, int middle, int right){
   int tmp[right - left + 1];
   int pos = 0, leftposition = left, rightposition = middle + 1;
   while (leftposition <= middle && rightposition <= right){
      if (array[leftposition] < array[rightposition]){
         tmp[pos++] = array[leftposition++];
      }
      else{
         tmp[pos++] = array[rightposition++];
      }
   }
   while (leftposition <= middle)
      tmp[pos++] = array[leftposition++];
   while (rightposition <= right)
      tmp[pos++] = array[rightposition++];
   int i;
   for (i = 0; i < pos; i++){
      array[i + left] = tmp[i];
   }
   return;
}
int main(){
   int size;
   printf("\n enter size of array:");
   scanf("%d", &size);
   int array[size];
   int i, j, k;
   printf("\n enter the elements in an array:");
   for (i = 0; i < size; i++){
      scanf("%d", &array[i]);
   }
   MergeSort(array, 0, size - 1);//calling sort function
   for (i = 0; i< size; i++){
      printf("%d ", array[i]);
   }
   printf("\n");
   return 0;
}

ผลลัพธ์

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

enter size of array:10
enter the elements in an array:
2
-10
34
-3
45
67
-89
34
23
67
-89 -10 -3 2 23 34 34 45 67 67