我通过运行快速排序算法遇到了分段错误。 这是我的代码
Sortings.h
class Sortings {
public:
static void QuickSort(int* array, int size);
private:
static int partition(int* array, int l, int r);
static void Quicksort_helper(int* array, int l, int r);
};
Sortings.cpp
#include "Sortings.h"
void Sortings::QuickSort(int* array, int size){
Quicksort_helper(array, 0, size);
}
int Sortings::partition(int* array, int l, int r){
int p = array[l];
int i = l;
int j = r + 1;
while (!(i <= j)){
while (!(array[i] >= p))
i = i+1;
while (!(array[j] <= p))
j = j-1;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
int temp2 = array[i];
array[i] = array[j];
array[j] = temp2;
int temp3 = array[l];
array[l] = array[j];
array[j] = temp3;
return j;
}
void Sortings::Quicksort_helper(int* array, int l, int r){
if (l < r){
int s = partition(array, l, r);
Quicksort_helper(array, l, (s-1));
Quicksort_helper(array, (s+1), r);
}
}
在main.cpp中,我使用输入数组和大小变量调用Quicksort。 运行main.cpp时为什么会出现Segmentation错误?
答案 0 :(得分:1)
你将大小传递给r。你设置j = r + 1。你循环i = l到j。这超出了你的数组范围。有效边界为[0,r-1]。你循环直到r + 1。这是你的问题。
答案 1 :(得分:1)
将大小传递给r,然后有索引#
int j = r + 1;
...
while (!(array[j] <= p))
j = j-1;
如果尺寸确实是“尺寸”,那么你就不在阵列中了。
也许:
Quicksort_helper(array, 0, size - 1);