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 HINT 注意此题的内存限制。要求使用C++实现,请给我代码
时间: 2024-01-22 10:19:08 浏览: 76
我们第一行包括两个整数n,k(1<=n<=100,k<=6e5),表示有n个数字,目标和为k 第二行输入n个整数(c1 c2
这道题可以使用快速排序来解决。快速排序的时间复杂度为 O(nlogn),比简单的冒泡排序和选择排序要快很多。下面是代码实现:
```c++
#include <iostream>
using namespace std;
void quick_sort(int arr[], int left, int right) {
if (left >= right) return; // 递归终止条件
int pivot = arr[(left + right) / 2]; // 取中间元素作为基准值
int i = left, j = right;
while (i <= j) {
while (arr[i] < pivot) i++; // 找到左边第一个大于等于基准值的元素
while (arr[j] > pivot) j--; // 找到右边第一个小于等于基准值的元素
if (i <= j) { // 交换两个元素的位置
swap(arr[i], arr[j]);
i++;
j--;
}
}
quick_sort(arr, left, j); // 递归处理左半部分
quick_sort(arr, i, right); // 递归处理右半部分
}
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
int arr[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
quick_sort(arr, 0, n - 1);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
return 0;
}
```
需要注意的是,由于输入的元素个数最多有 2000000,所以在定义数组时需要使用动态分配内存的方式。具体来说,可以使用 `int *arr = new int[n];` 来定义一个大小为 n 的数组,使用完后需要使用 `delete[] arr;` 来释放内存。但是,如果你用了 C++11 或更新的标准,也可以使用 `vector` 来替代数组,避免手动管理内存。
阅读全文