#include <iostream>
using namespace std;
void merge(int *a, int lo, int mi, int hi){//有序向量的排序
int *A = a + lo;
int lb = mi - lo;
int *B = new int[lb];
for (int i = 0; i < lb; i++){
B[i] = a[lo + i]; //复制前子向量
}
int lc = hi - mi;
int *C = a + mi;
for (int i = 0, j = 0, k = 0; (j < lb) || (k < lc);){
if ((j < lb) && (!(k < lc) || (B[j] <= C[k])))
A[i++] = B[j++];
if ((k < lc) && (!(j < lb) || (C[k] < B[j])))
A[i++] = C[k++];
}
delete[] B;
}
void mergesort(int *a, int lo, int hi){//无序向量的递归分割
if (hi - lo < 2) return; //单元素区间自然有序,否则...
int mi = (lo + hi) >> 1;
mergesort(a,lo, mi);
mergesort(a, mi, hi);
merge(a,lo,mi,hi);
}
int main(){
int a[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
mergesort(a, 0, 10);
for(int i = 0; i < 10; i++)
cout << a[i] << endl;
return 0;
}
mergesort(递归分割+有序向量的排序)
最新推荐文章于 2022-03-20 16:45:29 发布