我在使用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;
}
答案 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);
}
}