1.首先写出算法的核心:将两个有序数组合并为一个新数组的算法
int Merge_1(int arr[], int len) {
int* b = (int*)malloc(len * sizeof(int));//开辟辅助数组空间
int k = 0;//给辅助数组下标一个初始值,让程序不报错
int start1, start2, end1, end2;//暂定start为头end为尾,此时end是能取到的所以下面是小于等于,之后发现可以优化
//算法核心:将两个数组按从小到大合并为一个新数组
while (start1 <= end1 && start2 <= end2) {
b[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];
}
while (start1 <= end1) {
b[k++] = arr[start1++];
}
while (start2 <= end2) {
b[k++] = arr[start2++];
}
}
2.设置小步长和大步长(两个for循环),小步长控制两个要合并数组的跳跃,大步长控制从一组要合并的数组跳到另一组要合并的数组,并在最后交换辅助数组,以继续进行归并排序(seg===step我后面用的seg),特别说明一下因为需要被合并的两个数组必须是有序的所以步长必须从1开始到len-1结束否则结果不是无序就是不完全有序
int Merge_2(int arr[], int len) {
int* b = (int*)malloc(len * sizeof(int));
int k = 0;
int start1, start2, end1, end2;
//seg(小步长)配合start(两个start间是大步长),seg作用是给start赋值,start起(循环次数)的决定作用
for (in