首页 > 解决方案 > 在 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++。

标签: c++sortingquicksortexc-bad-accessstdvector

解决方案


你需要写出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;
}

推荐阅读