使用归并排序对数组进行排序的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:10enter 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