归并排序:利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。可以用于外排序。
# include <stdio.h>
void merge_sort(int a[],int b[],int low,int high);
void merge(int a[],int b[],int low,int mid,int high);
int main(void)
{
int a[]={4165,46,41,984,531,6,4653,6,46,4,64,63};
int b[100]; //辅助数组
merge_sort(a,b,0,sizeof(a)/sizeof(a[0])-1);
for (int i=0;i<sizeof(a)/sizeof(a[0]);++i)
printf ("%d ",a[i]);
return 0;
}
void merge_sort(int a[],int b[],int low,int high)
{
if (low >= high)
return;
int mid = (low+high)/2;
merge_sort(a,b,low,mid); //分治法
merge_sort(a,b,mid+1,high); ////分治法
merge(a,b,low,mid,high);
}
void merge(int a[],int b[],int low,int mid,int high)
{
int i,j,k;
for (i=low;i<=high;++i)
b[i] = a[i];
i = low;
j = mid+1;
k = low;
while(i <= mid && j <= high) //将b中的数据排序后存入a中
{
if (b[i] <= b[j])
a[k++] = b[i++];
else
a[k++] = b[j++];
}
while(i<=mid) //将b中i~mid中的剩余元素存入a中
a[k++] = b[i++];
while(j<=high) //将b中mid~high中的剩余元素存入a中
a[k++] = b[j++];
}