HRY得到n个数,他想把这n个数排好序然后输出。第一行是数据组数T(1<=T<=10)。 每组数据第一行是一个正整数n(1<=n<=2000000),第二行是n个小于等于1000的正整数。
时间: 2024-05-02 14:23:27 浏览: 63
这个问题可以使用快速排序来解决。快速排序是一种分治算法,它将一个数组分成两个子数组,然后递归地对子数组进行排序。
具体实现如下:
1. 选取一个基准元素(通常为数组的第一个元素)。
2. 将数组中小于等于基准元素的元素放在基准元素的左边,大于基准元素的元素放在右边。
3. 递归地对基准元素左边和右边的子数组进行排序。
以下是一个可能的实现(使用C++语言):
```cpp
#include <iostream>
#include <vector>
using namespace std;
void quicksort(vector<int>& nums, int left, int right) {
if (left >= right) {
return;
}
int pivot = nums[left];
int i = left + 1, j = right;
while (i <= j) {
if (nums[i] > pivot && nums[j] < pivot) {
swap(nums[i], nums[j]);
i++;
j--;
} else if (nums[i] <= pivot) {
i++;
} else {
j--;
}
}
swap(nums[left], nums[j]);
quicksort(nums, left, j - 1);
quicksort(nums, j + 1, right);
}
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
quicksort(nums, 0, n - 1);
for (int i = 0; i < n; i++) {
cout << nums[i] << " ";
}
cout << endl;
}
return 0;
}
```
时间复杂度:O(nlogn)。
注意:如果数组中存在重复元素,上述实现可能会导致超时。可以使用三路快速排序或计数排序等算法来优化。
阅读全文