递归排序
基本思想:将两个或两个以上的的有序表组合成一个新的有序表
# include <stdio.h>
# include <stdlib.h>
void Merge(int *a, int low, int mid, int high){
//将有序的a[low-mid]和有序的a[mid+1,high]归并成有序的a[low-high]
int i = low, j = mid+1, k = 0;
int *b = (int*)malloc(sizeof(int)*(high-low+1));
while(i <= mid && j<= high){
if(a[i]<a[j]){
b[k] = a[i];
i++;
}else{
b[k] = a[j];
j++;
}
k++;
}
while(i <= mid){
b[k++] = a[i++];
}
while(j <= high){
b[k++] = a[j++];
}
for(k = 0; k <= high-low; k++){//每次归并得到的结果
a[low+k] = b[k];
printf("%d ", a[low+k]);
}
printf("\n");
free(b);//释放数组b
return ;
}
void MergeSort(int *a, int low, int high){
//对数列a[low-high]进行归并排序
int mid;
if(low < high){
mid = (low+high)/2;//将数列a[low-high]平分成a[low-mid]和a[mid+1-high]
MergeSort(a, low, mid);//递归地将a[low-mid]归并成有序的
MergeSort(a, mid+1, high);//递归地将a[mid+1-high]归并成有序的
Merge(a, low, mid, high);//将a[low-mid]和a[mid+1-high]归并到a[low-high]中
}
return ;
}
int main(void){
int a[] = { 38,49, 65, 97, 13, 27, 49,76 };
MergeSort(a, 0, 7);
return 0;
}
结果: