#include<iostream>
using namespace std;
int *a;
int n;
void merge(int lo, int mi, int hi) {
int i = lo;
int j = mi + 1;
int k = 0;
int *b = new int[hi - lo + 1];
while (i <= mi || j <= hi) {
if (i <= mi && j <= hi) b[k++] = (a[i] < a[j]) ? a[i++] : a[j++];//二路的数组中取小的那个加入新数组
else b[k++] = (i <= mi) ? a[i++] : a[j++];//有一路已经全部加入新数组
}
k = 0;
while (lo <= hi) a[lo++] = b[k++];//复制到老数组里
}
void mergesort(int lo, int hi) {
if (hi - lo < 1) return;//递归到平凡情况
int mi = (lo + hi) / 2;
mergesort(lo, mi);//二路递归
mergesort(mi + 1, hi);
merge(lo, mi, hi);//合并
}
int main() {
while (cin >> n) {
a = new int[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
mergesort(0, n - 1);
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
}
}
c++归并排序
最新推荐文章于 2024-10-04 17:07:53 发布