对于归并排序,不仅有递归的实现方式,还有迭代的实现方式。
迭代法实现归并排序的代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
//实现归并,并将最后的数据放入到list1中
void merging(int *list1,int list1_size,int *list2, int list2_size)
{
int i,j,k,n,temp[MAX_SIZE];
i = j = k = 0;
while(i<list1_size && j<list2_size)
{
if(list1[i]<list2[j])
{
temp[k++] = list1[i++];
}
else
{
temp[k++] = list2[j++];
}
}
while(i<list1_size)
{
temp[k++] = list1[i++];
}
while(j<list2_size)
{
temp[k++] = list2[j++];
}
for(n=0;n<(list1_size + list2_size);n++)
{
list1[n] = temp[n];
}
}
//递归拆分
void mergesort(int k[], int n)
{
if( n>1)
{
int *listL = k;
int listL_size = n/2;
int *listR = k+n/2;
int listR_size = n - listL_size;
mergesort(listL, listL_size);
mergesort(listR, listR_size);
merging(listL, listL_size,listR, listR_size);
}
}
int main()
{
int i,arr[10]={5,8,48,74,51,54,97,6,2,1};
mergesort(arr,10);
printf("排序后的结果是:\n");
for (i = 0;i<10;i++)
{
printf("%d\t",arr[i]);
}
return 0;
}
输出结果: