快速排序的分段错误(核心转储)错误

时间:2015-01-03 03:48:52

标签: segmentation-fault

我在使用C ++实现Quicksort时遇到了麻烦。 我不知道为什么我收到“Segmentation fault(core dumped)”错误... 这是我的代码。任何帮助将非常感谢。谢谢! 我也不太清楚如何制作基本情况以及如何在需要组合时将左数组,数组和右数组放在一起放在一个数组中。

void printVector(vector<int> ar, int ar_size);

    void quickSort(vector <int>  ar, int ar_size) {
        int pivot = ar[0];
        vector <int> left(ar_size);
        int leftcount = 0;
        vector <int> right(ar_size);
        int rightcount = 0;

    for(int i = 0; i < ar_size; i++){
        if(ar[i] < pivot){
            left.push_back(ar[i]);
            leftcount++;
        }
        if(ar[i] >= pivot){
            right.push_back(ar[i]);
            rightcount++;
        }
    }
    if(ar_size <= 2){
        printVector(left, leftcount);
        cout << pivot;
        printVector(right, rightcount);
    }
    if(leftcount>0){
    quickSort(left, leftcount);
    }
    if(rightcount>0){
    quickSort(right, rightcount);
    }

}

void printVector(vector<int> ar, int ar_size){

        for(int i = 0; i<ar_size; i++){

        cout << ar[i] << " ";

    }
}

int main(void) {
   vector <int>  _ar;
   int _ar_size;
cin >> _ar_size;
for(int _ar_i=0; _ar_i<_ar_size; _ar_i++) {
   int _ar_tmp;
   cin >> _ar_tmp;
   _ar.push_back(_ar_tmp); 
}

quickSort(_ar, _ar_size);

return 0;
}

1 个答案:

答案 0 :(得分:0)

算法“一般”没问题,但这里存在很多问题。

首先,您可能希望reserve内存而不是在每次迭代时在向量中创建ar_size元素。

其次,您希望从quickSort而不是int i = 1开始执行int i = 0中的循环,因为其中n个最大元素将始终位于vector<int> right中,您将获得堆栈溢出。

第三,也就是说,您的打印/排序顺序应如下所示:

if (leftcount>0) {
    quickSort(left, leftcount);
    if (ar_size == 1){
        printVector(left, leftcount);
    }
}

cout << pivot << " ";

if (rightcount>0) {
    quickSort(right, rightcount);
    if (ar_size == 1) {
        printVector(right, rightcount);
    }
}