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);
}
void quicksort(vector<int> &vec, int L, int R)
和
void swap(vector<int> v, int x, int y)
第一个参数不使用引用。
就像各种评论所说,问题是您的交换版本与 std::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::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 如何从C++的对的排序向量中获取有关给定值的相应对
- 不正确的比较和交换计数器输出用于快速排序功能
- 对象接收堆栈溢出异常 c++ 的排序向量
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序的数组版本对向量进行排序
- 快速排序函数C++ 1 个参数 - 向量
- C++ 使用向量快速排序
- 为对象向量实现快速排序算法
- 对象的c++快速排序向量
- C++快速排序向量并保留原始索引号
- 当对可被7整除的向量大小进行排序时,是否有什么东西会导致快速排序算法出错
- 如何对字符串向量进行快速排序,我必须对字符串的长度进行排序
- 快速排序应用于指向对象的指针向量-无限循环
- cin字符串到一个向量中,并对它们进行快速排序