归并排序在很多地方都用得到,总结就是把一个有n个元素的无序数组,看成n个有序数组,再把他们合并成有序数组
# include <stdio.h>
#define MAXSIZE 10
void Merge(int *left,int lsize,int *right,int rsize)
{
int i,j,m;
int temp[MAXSIZE];
i = j = m = 0;
while(i<lsize && j<rsize)
{
if(left[i]<right[j])
{
temp[m++] = left[i++];
}else{
temp[m++] = right[j++];
}
}
//当left还有剩余数时
while(i<lsize)
{
temp[m++] = left[i++];
}
//当right还剩余时
while(j<rsize)
{
temp[m++] = right[j++];
}
//然后把数据填回left
for(int k = 0;k<(lsize+rsize);k++)
{
left[k] = temp[k];
}
}
void MergeSort(int *a,int n)
{
if(n>1)
{
//开始分割
int *left = a;
int lsize = n/2;
int *right = a + lsize;
int rsize = n - lsize;
MergeSort(left,lsize);
MergeSort(right,rsize);
//然后合并
Merge(left,lsize,right,rsize);
}
}
int main()
{
int arr[10] = {12,34,1,7,45,89,123,569,9,1223};
MergeSort(arr,10);
for(int i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}