#include "stdio.h"
int b[100];
void merge(int a[], int left, int mid, int right)
{
int l = left;
int m = mid+1;
int k = 0;
while(l<=mid && m<=right) //如果左半区间或右半区间结束,则跳出循环
{
if(a[l] <= a[m]) //如果左半区间元素较小
b[k++] = a[l++];
else //如果右半区间元素较小
b[k++] = a[m++];
}
while(l<=mid) //如果左半区间元素剩余
b[k++] = a[l++];
while(m<=right) //如果有半区间元素剩余
b[k++] = a[m++];
int i;
for(i=0; i<(right-left+1); i++) //将结果复制回数组a[]
a[left+i] = b[i];
}
void mergeSort(int a[], int left, int right)
{
if(left<right) //至少有两个元素
{
int mid = (left + right)/2; //取中点
mergeSort(a, left, mid); //对左半区间进行排序
mergeSort(a, mid+1, right); //对右半区间进行排序
merge(a, left, mid, right); //将结果进行合并
}
}
int main()
{
int a[100];
int len;
printf("输入元素个数:");
scanf("%d", &len);
printf("输入元素:");
int i;
for(i=0; i<len; i++)
scanf("%d", &a[i]);
mergeSort(a, 0, len-1);
for(i=0; i<len; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
归并排序
最新推荐文章于 2024-08-12 19:32:44 发布