社区讨论
萌新求助,快速排序超时?
P1177【模板】排序参与者 6已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @lo1ndtgg
- 此快照首次捕获于
- 2023/10/22 23:52 2 年前
- 此快照最后确认于
- 2023/11/03 00:36 2 年前
我用的是lomuto paritition的方式,在后两个测试用例上超时。代码如下:
C#include<vector>
#include<iostream>
using namespace std;
int partition(vector<int>& nums, int left, int right){
int pivot = rand() % (right - left + 1) + left;
swap(nums[pivot], nums[left]);
int v = nums[left];
int i = left + 1;
for(int j = left + 1; j <= right; ++j){
if(nums[j] < v){
if(i == j){
++i;
} else{
swap(nums[i++], nums[j]);
}
}
}
swap(nums[left], nums[i - 1]);
return i - 1;
}
void quickSort(vector<int>& nums, int left, int right){
if(left >= right) return;
int mid = partition(nums, left, right);
quickSort(nums, left, mid - 1);
quickSort(nums, mid + 1, right);
}
int main(){
int N;
cin >> N;
vector<int> nums(N, 0);
for(int i = 0; i < N; ++i){
cin >> nums[i];
}
quickSort(nums, 0, N - 1);
for(int i = 0; i < N; ++i){
if(i < N - 1) cout << nums[i] << " ";
else cout << nums[i] << endl;
}
}
然而,换成Hoare partition或三路快排就能过。为什么呢?
回复
共 11 条回复,欢迎继续交流。
正在加载回复...