c++ - 在 C++ 中使用 std::vector 进行快速排序,EXC_BAD_ACCESS 代码 2
问题描述
当我运行我的快速排序算法时,VS Code 捕获了这个异常:EXC_BAD_ACCESS (code=2, address=0x7ffeef3ffffc)。这发生在 partition() 的第一行:
int i = p;
我试图实现 Cormen 算法:http ://www.cs.fsu.edu/~lacher/courses/COP4531/lectures/sorts/slide09.html
为什么我不能访问变量 p?它是否已发布,如果已发布,我该如何解决?
我的代码
//.h file
void sortVector(vector<int> &vec, int p=0, int r=-2);
int partition(vector<int> &vec, int p, int r);
//.cpp file
int partition(vector<int> &vec, int p, int r) {
int i = p;
for (int j = p; j <r-1; ++j) {
if (vec[j] < vec[r-1]) {
swap(vec[j], vec[r-1]);
i++;
}
swap(vec[i], vec[r-1]);
}
return i;
}
void sortVector(vector<int> &vec, int p, int r) {
if (r == -2) {
r = vec.size();
}
if (p-r<1) {
int q = partition(vec, p, r);
sortVector(vec, p, q);
sortVector(vec, q+1, r);
}
}
我包括来自 Stroustrup 的“std_lib_facilities.h”:Programming Principles and Practice Using C++。
解决方案
你需要写出swap(vec[i], vec[r-1]);
循环for
。
应该是这样的——
//.cpp file
int partition(vector<int> &vec, int p, int r) {
int i = p;
for (int j = p; j <r-1; ++j) {
if (vec[j] < vec[r-1]) {
swap(vec[j], vec[r-1]);
i++;
}
}
swap(vec[i], vec[r-1]);
return i;
}
推荐阅读
- .net-core - 如何在批处理文件中运行 .net 核心应用程序
- java - 如果工作流程完成/失败,则更新数据库
- github - 如果 git 分支被删除,为什么可以结帐?
- javascript - 如何使粘性元素“浮动”
- jenkins - groovy.lang.MissingPropertyException:没有这样的属性:类的工件:groovy.lang.Binding
- ruby - FactoryBot 动态属性
- php - SQL - SQL 注入的真正危险是什么?
- javascript - 如何对 Polymer 3.0 中的属性和子属性进行“批量属性更改”
- html - 引导标题在弹回之前折叠一秒钟?
- python-3.x - Keras RNN 编码器-解码器架构输出的维度