#include<bits/stdc++.h> using namespace std; int n; int nums[100005]; void QuickSort(int left, int right) { if (left >= right)return; int tmp = nums[left]; int a = left, b = right; while (a < b) { while (nums[b] >= tmp && a < b)--b; while (nums[a] < tmp && a < b)++a; swap(nums[a], nums[b]); } swap(nums[a], tmp); QuickSort(left, a); QuickSort(a + 1, right); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (size_t i = 0; i < n; i++)cin >> nums[i]; QuickSort(0, n - 1); for (size_t i = 0; i < n; i++)cout << nums[i] << " "; return 0; } 你看一下我的快排代码有什么问题
时间: 2024-04-10 11:28:07 浏览: 12
您的快速排序代码看起来基本上是正确的,但有几个小问题:
1. 在快速排序函数的开头,可以添加一个条件判断来检查left是否大于等于right,如果是的话,直接返回。这样可以避免不必要的递归调用。
2. 在交换nums[a]和tmp的语句中,tmp应该被赋值给nums[a],而不是将nums[a]与tmp交换。
以下是修正后的代码:
```cpp
#include <bits/stdc++.h>
using namespace std;
int n;
int nums[100005];
void QuickSort(int left, int right) {
if (left >= right) return;
int tmp = nums[left];
int a = left, b = right;
while (a < b) {
while (nums[b] >= tmp && a < b) --b;
while (nums[a] < tmp && a < b) ++a;
swap(nums[a], nums[b]);
}
nums[left] = nums[a]; // 将tmp赋值给nums[a]
nums[a] = tmp;
QuickSort(left, a - 1);
QuickSort(a + 1, right);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (size_t i = 0; i < n; i++) cin >> nums[i];
QuickSort(0, n - 1);
for (size_t i = 0; i < n; i++) cout << nums[i] << " ";
return 0;
}
```
希望能帮到您!如果还有其他问题,请随时提问。