使用归并排序对数组进行排序的C程序

数组是一组共享一个公共名称的相关数据项。数组中的特定值借助其“索引号”来标识。

声明数组

声明数组的语法如下 -

datatype array_name [size];

例如,

float marks [50]

它声明 'marks' 是一个包含 50 个浮点元素的数组。

int number[10]

它将“数字”声明为最多包含 10 个整数常量的数组。

每个元素都通过使用“数组索引”来标识。

使用数组索引可以轻松访问数组元素。

我们用于合并排序的逻辑如下 -

void MergeSort(int *array, int left, int right){

   int middle = (left+right)/2;

   if(left<right){

      //对左侧部分进行排序

      MergeSort(array, left, middle);

      //排序正确的部分

      MergeSort(array, middle + 1, right);

      // 合并两部分

      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){

      //对左侧部分进行排序

      MergeSort(array, left, middle);

      //排序正确的部分

      MergeSort(array, middle + 1, right);

      // 合并两部分

      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);//调用排序函数

   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

以上是 使用归并排序对数组进行排序的C程序 的全部内容, 来源链接: utcz.com/z/350490.html

回到顶部