int test(void){
int x[] = {3,2,1,6,3,7,5,1,9,21,97,32,5,4};
int n = (sizeof x)/4;
mergeSort(x,0,n-1);
for(int i = 0; i < n; i++)
cout<<x[i]<<endl;
return 0;
}
int mergeSort(int *x, int p, int q){
if(p < q){
int mid = (p+q)/2;
mergeSort(x, p, mid);
mergeSort(x, mid+1, q);
merge(x, p, q);
}
return 0;
}
int merge(int *x, int p, int q){
int n = q-p+1;
int y[n];
int mid = (p+q)/2;
int n1 = p;
int n2 = mid+1;
for(int i = 0; i < n; i++){
if(n1 <= mid && n2 <=q){
if(x[n1] < x[n2]){
y[i] = x[n1];
n1++;
}
else{
y[i] = x[n2];
n2++;
}
}
else if(n1 > mid)
y[i] = x[n2++];
else
y[i] = x[n1++];
}
for(int i = 0; i < n; i++)
x[p+i] = y[i];
return 0;
}
合并排序
最新推荐文章于 2022-11-27 14:28:13 发布