为什么我在快速排序时遇到分段错误
Why am I getting a segmentation fault on Quick Sort?
我在运行快速排序算法时遇到分段错误。这是我的代码
排序.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);
};
排序.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);
}
}
在主.cpp我使用输入数组和大小变量调用快速排序。为什么在运行主.cpp时出现分段错误?
您将大小作为 r 传递。 你设置 j=r+1。 你循环 i=l 到 j。 这超出了您的阵列范围。 有效边界为 [0,r-1]。 你循环到 r+1。 那是你的问题。
大小传递给 r,然后有索引 #
int j = r + 1;
...
while (!(array[j] <= p))
j = j-1;
如果大小真的是"大小",那么你就不在数组中了。
或:
Quicksort_helper(array, 0, size - 1);
相关文章:
- 创建结构的数组时遇到分段错误
- 为什么我遇到分段错误?
- 我遇到了黑客排名中的问题"TWO STRINGS"的三个测试用例的分段错误。原因是什么?
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- hiredis SET遇到分段故障
- 为什么我遇到分段错误
- 为什么我在这里遇到分段错误?[Python ctypes]
- 我在运行这个黑客排名 Gridland 地铁的解决方案时遇到分段错误
- 使用递归方法遇到分段错误
- 为什么我会遇到分段错误?瓦尔格林德
- 为什么我在快速排序时遇到分段错误
- 当遇到很长的循环时,会出现分段错误:11 或内存分配错误
- 为什么我在此代码中遇到分段错误
- 为什么我遇到分段错误
- 为什么我会遇到分段错误以及如何解决它
- 为什么我遇到此代码的分段错误?此代码几乎没有运行,因此构造函数或复制构造函数中可能存在错误
- 我运行一个程序并遇到分段错误(核心转储),我使用 gdb 进行调试,程序在运行 ui->setupUI() 时崩溃了
- 在 std::set<boost::uuids::uuid> 的析构函数中,我在 _int_free 中遇到了分段错误(核心转储)。为什么?
- c++我想连接char,但是我遇到了分段错误
- 当我在 c++ 中创建带有结构的节点时,我遇到了分段错误