gpt4 book ai didi

c++ - 快速排序;段错误,但找不到哪里?

转载 作者:行者123 更新时间:2023-12-01 14:43:56 26 4
gpt4 key购买 nike

我做了一个快速排序算法作为 main 中的普通函数,然后尝试将它转移到一个类(class)(根据我的导师想要的)。但是,我现在收到段错误错误,但我无法弄清楚它发生在哪里。源代码如下;谢谢。

主文件

#include "MergeSort.h"
#include "QuickSort.h"
#include <iostream>
using namespace std;

const int SIZE = 10;

int main() {
cout << "This is compiling.\n";
int testArray[SIZE] = {5,3,9,2,1,3,8,1,7,9};
for (int i = 0; i < SIZE; i++) {
cout << testArray[i];
}
QuickSort test(testArray, SIZE);
int * result = test.getArray();

cout << endl;
for (int i = 0; i < SIZE; i++) {
cout << result[i];
}
return 0;
}

快速排序.cpp
#include "QuickSort.h"
//constructor
QuickSort::QuickSort(const int anArray[], int aSize) {
array_p = new int[aSize];
size = aSize;

for (int i = 0; i < size; i++)
array_p[i] = anArray[i];

quickSort(0, aSize - 1);
return;
}
//destructor
QuickSort::~QuickSort() {
delete [] array_p;
return;
}
//accessor function for array
int * QuickSort::getArray() {
return array_p;
}

//PRIV MEM FUNCTIONS
void QuickSort::quickSort(int start, int end)
{
if (start == end)
return;

int pivot;
pivot = partition(array_p, start, end);

//quickSort everything before where pivot is now
quickSort(start, pivot - 1);

//quickSort everything after where pivot is now
quickSort(pivot, end);

return;
}
int QuickSort::partition(int a[], int start, int end)
{
int first, last, pivot;
pivot = end;
first = start;
last = end - 1; //minus one is because pivot is at last

while (first < last) {
if (a[first] > a[pivot] && a[last] < a[pivot]) {
swap(a, first, last);
first++;
last--;
}
else {
if (a[first] <= a[pivot])
first++;
if (a[last] >= a[pivot])
last--;
}
}

if (a[pivot] > a[first]) {
swap(a, pivot, first + 1);
return first + 1;
}
else {
swap(a, pivot, first);
return first;
}

}
void QuickSort::swap(int a[], int indexOne, int indexTwo)
{
int temp = a[indexOne];
a[indexOne] = a[indexTwo];
a[indexTwo] = temp;
return;
}

我想可能是
quickSort(start, pivot - 1);

因为一旦我将其注释掉,我就不会收到错误;但是,我不知道为什么。

最佳答案

更改quickSort(pivot, end);quickSort(pivot+1, end);
if (start == end)if (start >= end) .

您的代码现在可以正常运行了。

关于c++ - 快速排序;段错误,但找不到哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59227401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com