void merge_array(int a[],int first, int mid, int last, int temp[])
{
int i = first, j = mid + 1;
int m = mid, n = last;
int k = 0;
while(i <= m && j <= n)
{
if(a[i] <= a[j])
{
temp[k++] = a[i++];
}
else
{
temp[k++] = a[j++];
}
}
while(i <= m)
{
temp[k++] = a[i++];
}
while(j <= m)
{
temp[k++] = a[j++];
}
for(i=0; i < k; i++)
{
a[first + i] = temp[i];
}
}
void mergesort(int a[], int first, int last, int temp[])
{
if(first < last)
{
int mid = (first + last)/2;
mergesort(a, first,mid, temp); //取数组前一半进行mergesort,直到子数组只有一个元素
mergesort(a, mid+1, last, temp); //取数组后一半进行mergesort,直到子数组只有一个元素
merge_array(a, first, mid, last, temp); //将两个有序数组合并在一起
}
}
void main()
{
int array[6] = {4,3,10,82,2,1};
int b[6] = {0};// b用作临时存储数组
mergesort(array,0,5,b);
for(int i=0;i<6;i++)
{
printf("%d,",array[i]);
}
}
C语言实现普通归并排序
最新推荐文章于 2022-11-03 13:29:04 发布