提问人:Blake K Akiti 提问时间:11/20/2017 最后编辑:Blake K Akiti 更新时间:5/12/2019 访问量:17101
使用向量进行C++快速排序
C++ Quicksort with vectors
问:
快速排序功能工作得很好,因为我尝试过使用标准数组。但是,当使用向量时,我收到一条错误消息,说交换函数不接受 3 个参数。任何帮助将不胜感激。
void quicksort(vector<int> &vec, int L, int R) {
int i, j, mid, piv;
i = L;
j = R;
mid = L + (R - L) / 2;
piv = vec[mid];
while (i<R || j>L) {
while (vec[i] < piv)
i++;
while (vec[j] > piv)
j--;
if (i <= j) {
swap(vec, i, j); //error=swap function doesnt take 3 arguments
i++;
j--;
}
else {
if (i < R)
quicksort(vec, i, R);
if (j > L)
quicksort(vec, L, j);
return;
}
}
}
void swap(vector<int> v, int x, int y) {
int temp = v[x];
v[x] = v[y];
v[y] = temp;
}
int main() {
vector<int> vec1;
const int count = 10;
for (int i = 0; i < count; i++) {
vec1.push_back(1 + rand() % 100);
}
quicksort(vec1, 0, count - 1);
}
答:
1赞
devin
11/20/2017
#1
看
void quicksort(vector<int> &vec, int L, int R)
和
void swap(vector<int> v, int x, int y)
第一个参数不使用 reference。
0赞
Tono
11/20/2017
#2
就像各种评论说的那样,问题是您的交换版本与 std::swap 混淆了。您可以通过在使用 swap 之前移动 swap 的实现或在使用它之前添加声明来修复它。
此外,根据 Devin 的回答,通过引用传递,以便您取回交换的值。
以下是固定代码:
#include <vector>
using namespace std;
void swap(vector<int>& v, int x, int y);
void quicksort(vector<int> &vec, int L, int R) {
int i, j, mid, piv;
i = L;
j = R;
mid = L + (R - L) / 2;
piv = vec[mid];
while (i<R || j>L) {
while (vec[i] < piv)
i++;
while (vec[j] > piv)
j--;
if (i <= j) {
swap(vec, i, j); //error=swap function doesnt take 3 arguments
i++;
j--;
}
else {
if (i < R)
quicksort(vec, i, R);
if (j > L)
quicksort(vec, L, j);
return;
}
}
}
void swap(vector<int>& v, int x, int y) {
int temp = v[x];
v[x] = v[y];
v[y] = temp;
}
int main() {
vector<int> vec1;
const int count = 10;
for (int i = 0; i < count; i++) {
vec1.push_back(1 + rand() % 100);
}
quicksort(vec1, 0, count - 1);
}
评论
std::swap
using namespace std;
,虽然当然是不好的做法,但在这里没有错。 即使没有它,也会被 ADL 抓住。std::swap