#include<stdio.h>
//该函数是归并排序的核心代码
void _merge(int arr[],int l,int mid,int r){
int aux[r - l + 1];//开辟辅助区间
for(int i = l ; i <= r ; i++){ //将arr中所有内容赋值到aux中,注意偏移量,aux数组是从0开始的
aux[i - l] = arr[i];
}
int i = l,j = mid + 1;
for(int k = l ; k <= r ; k++){
if(i >mid){
arr[k] = aux[j - l];
j++;
}
else if(j > r){
arr[k] = aux[i - l];
i++;
}
else if(aux[i - l] < aux[j - l]){
arr[k] = aux[i - l];
i++;
}
else{
arr[k] = aux[j - l];
j++;
}
}
}
//该函数的作用是使用归并排序,对arr[l.....r]闭区间进行先分层后进行归并排序
void _mergeSort(int arr[],int l,int r){
//处理递归到底的情况
if(l >= r){
return;
}
int mid = (l + r) / 2;
_mergeSort(arr,l,mid);
_mergeSort(arr,mid + 1,r);
_merge(arr,l,mid,r);
}
//处理该数组的开始以及结束的位置
void mergeSort(int arr[],int n){
_mergeSort(arr,0,n - 1);
}
int main(){
int arr[7] = {5,9,6,2,10,8,1};
mergeSort(arr,7);
for(int i = 0 ; i < 7 ; i++)
printf("%d ",arr[i]);
}