为什么我在Quick Sort上遇到分段错误?

时间:2014-02-16 17:43:58

标签: c++ segmentation-fault quicksort

我通过运行快速排序算法遇到了分段错误。 这是我的代码

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错误?

2 个答案:

答案 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);