归并排序的思路:
归并排序是通过“归并”这种操作完成排序的目的,将俩个或多个有序子表归并成一个子表。在归并排序中,此处将对二路归并进行分析。
二路归并排序算法:
将俩个有序表直接归并为一个有序表的算法Merge(),设俩个有序表存放在同一个数组中的相邻位置上:arr[low,mid]和arr[mid+1,high],先将它们合并到一个局部的暂存数组arr1中,待合并完成后将arr1复制回arr中。此处将arr[low,mid]称为第一段,arr[mid+1,high]称为第二段。每次从第一段中取出一个元素进行关键字的比较,将较小者放入arr1中,最后将各段中剩余的部分直接复制到arr1中,这样arr1就是一个有序表,再将arr1复制回arr中。
程序代码:
Merge.h:
#include<stdio.h>
#include<stdlib.h>
typedef int RecType;
Merge.c:
//释放申请空间
free(arr1);
}
//主函数
int main(){
RecType arr[] = {5,6,7,8,1,2,3,4};
Merge(arr,0,3,7);
int i = 0;
printf("Merge before:");
for(;i<8;++i){
printf("%d ",arr[i]);
}
printf("\n");
i = 0;
printf("Merge after:");
for(;i<8;++i){
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
检测结果: