Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的快速排序+;对于std::vector,EXC\u错误\u访问代码2_C++_Sorting_Quicksort_Exc Bad Access_Stdvector - Fatal编程技术网

C++ C+中的快速排序+;对于std::vector,EXC\u错误\u访问代码2

C++ C+中的快速排序+;对于std::vector,EXC\u错误\u访问代码2,c++,sorting,quicksort,exc-bad-access,stdvector,C++,Sorting,Quicksort,Exc Bad Access,Stdvector,VS代码在我运行快速排序算法时捕获此异常: EXC\u错误访问(代码=2,地址=0x7FFEF3FFFFC)。这发生在分区()的第一行: inti=p; 我已尝试实施Cormen算法: 为什么我不能访问变量p?它是否已发布,如果已发布,如何修复 我的代码 /.h文件 无效排序向量(向量和向量,int p=0,int r=-2); int划分(向量&vec,int p,int r); //.cpp文件 整数分割(向量和向量,整数p,整数r){ int i=p; 对于(int j=p;j您需要编写

VS代码在我运行快速排序算法时捕获此异常: EXC\u错误访问(代码=2,地址=0x7FFEF3FFFFC)。这发生在分区()的第一行:

inti=p;
我已尝试实施Cormen算法:

为什么我不能访问变量p?它是否已发布,如果已发布,如何修复

我的代码
/.h文件
无效排序向量(向量和向量,int p=0,int r=-2);
int划分(向量&vec,int p,int r);
//.cpp文件
整数分割(向量和向量,整数p,整数r){
int i=p;

对于(int j=p;j您需要编写
交换(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;
}
/.cpp文件
整数分割(向量和向量,整数p,整数r){
int i=p;

对于(int j=p;j您需要编写
交换(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;
}
/.cpp文件
整数分割(向量和向量,整数p,整数r){
int i=p;

对于(int j=p;j,两个函数都存在问题:

分区():

  • 第一次交换有错误的论点
  • 第二次掉期交易必须移出 for循环(由Faruk Hossain建议)

  • if(vec[j]
    变成
    if(vec[j]两个函数都有问题:

    分区():

    • 第一次交换有错误的论点
    • 第二次掉期交易必须移出 for循环(由Faruk Hossain建议)

    • if(vec[j]
      变成了
      if(vec[j]这提供了一个很好的例子,表明程序的崩溃站点通常不在错误所在的位置。这是一个值得指出的错误,即使在未提供的代码中还有更多的错误。谢谢,这是几个错误之一。我将编辑文章以显示工作代码。这提供了一个很好的例子,说明程序的s崩溃站点通常不是bug所在的位置。这是一个值得指出的bug,即使在未提供的代码中还有更多的bug。谢谢,这是几个bug中的一个。我将编辑帖子以显示工作代码。崩溃的最可能原因是堆栈溢出。
      p
      I
      (可能两者都有)不再在有效内存中。这是因为其他地方的错误,Faruk的回答证明是一个很好的候选错误和解决方案,防止递归结束。崩溃的最可能原因是堆栈溢出。
      p
      i
      (可能两者都有)不再在有效内存中。这是因为其他地方有一个bug,Faruk的答案证明是一个很好的候选bug和解决方案,防止递归结束。