归并排序(递归)
作者:
高歌猛进
,
2024-08-03 22:52:34
,
所有人可见
,
阅读 2
#include<stdio.h>
void MergeSort(int a[],int low,int high){
if(low<high){
int mid = (low+high)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
merge(a,low,mid,high);
}
}
void merge(int a[],int low,int mid,int high){
int b[high-low+1];
int i = low;
int j = mid+1;
int k = 0;
while(i <= mid && j <= high){
if(a[i]<a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
while(i <= mid) b[k++] = a[i++];
while(j <= high) b[k++] = a[j++];
for(i=low,k=0;i<=high;i++,k++) a[i] = b[k];
}
int main(){
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++) scanf("%d",&a[i]);
MergeSort(a,0,n-1);
for(int i=0;i<n;i++) printf("%d ",a[i]);
}