实现快速排序的内存问题

Memory issue implementing quick sort

本文关键字:问题 内存 快速排序 实现      更新时间:2023-10-16

我正在尝试实现快速排序来对整数序列进行排序。我使用以下代码获得分段默认值:

我实现了分区和快速排序递归调用。但是由于某些c ++原因,我可以访问内存或无限循环,我不明白为什么。

   #include <fstream>
#include<vector>
#include<iostream>
using namespace std;

int pivotSelection(vector<int> A){
    return 0;
}
int partition(vector<int> &A,int l,int r){
    int i=l+1;
    int p = A[l];
    for(int j=0; j< A.size(); j++) {
        if(A[j]<p){
            swap(A[j], A[i] );
            i=i+1;
        }
    }
    swap(A[l], A[i-1]);
    return i;
}
vector<int> readArray(char* file){
    ifstream inFile;
    vector<int> A;
    inFile.open(file);
    int x;
    while (inFile >>x ) {
        A.push_back(x);
    }
    return A;
}
void quickSort(vector<int> &A, int l,int r){
    if(r==1) {
        return ;
    }
    if(r>l){
        int p= partition(A,l,r);
        quickSort(A,l,p-1);
        quickSort(A,p+1,r);
    }
}
int  main(){
vector<int> A;//= readArray((char*)"/home/brunoeducsantos/AlgorithmFoundation/quicksort/data.txt");
A.push_back(3);
A.push_back(5);
A.push_back(7);
A.push_back(1);
int length = A.size();
quickSort(A,0,length-1);
for(int i=0;i<length;i++) cout<<A[i]<<endl;
return 0;

};

预期结果是 :1 3 5 7

注释中提到的修复:

int partition(vector<int> &A,int l,int r){
    int i=l+1;
    int p = A[l];
    for(int j=i; j<=r; j++) {         // fix
        if(A[j]<p){
            swap(A[j], A[i] );
            i=i+1;
        }
    }
    swap(A[l], A[i-1]);
    return i-1;                         // fix
}