Description HRY得到n个数,他想把这n个数排好序然后输出。 Input 第一行是数据组数T(1<=T<=10)。 每组数据第一行是一个正整数n(1<=n<=2000000),第二行是n个小于等于1000的正整数。 Output 每组数据输出一行,表示排好序的数组。 Sample Input 1 5 1 2 3 4 5 Sample Output 1 2 3 4 5 要求使用C++实现不使用快速排序,请给我代码
时间: 2024-01-22 15:19:19 浏览: 76
好的,以下是使用归并排序实现的 C++ 代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 2e6 + 10;
int n, a[MAXN], tmp[MAXN];
void merge_sort(int l, int r) {
if (l == r) return;
int mid = (l + r) >> 1;
merge_sort(l, mid);
merge_sort(mid + 1, r);
int k = 0, i = l, j = mid + 1;
while (i <= mid && j <= r) {
if (a[i] <= a[j]) tmp[k++] = a[i++];
else tmp[k++] = a[j++];
}
while (i <= mid) tmp[k++] = a[i++];
while (j <= r) tmp[k++] = a[j++];
memcpy(a + l, tmp, sizeof(int) * k);
}
int main() {
int T;
cin >> T;
while (T--) {
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
merge_sort(1, n);
for (int i = 1; i <= n; i++) cout << a[i] << " ";
cout << endl;
}
return 0;
}
```
这里使用了归并排序,时间复杂度为 $O(n\log n)$。
阅读全文