【发布时间】:2018-02-24 15:41:38
【问题描述】:
我在尝试运行此 QuickSort 时遇到分段错误:11,但它编译得很好。我使用驱动程序运行它,这就是我使用 quicksort() 和 quicksortR() 的原因。造成分割的原因是什么?
/* -------- Quick sort stuff starts here --------- */
int partition(int array[], int start, int stop) {
int compars = 0;
int pivot = array[stop];
int i = start - 1;
for (int j = start; j <= stop - 1; j++) {
if (array[j] <= pivot) {
i++;
int temp = array[j];//swaps values of i and j
array[j] = array[i];
array[i] = temp;
}
compars++;
}
int temp = array[i + 1];
array[i + 1] = array[stop];
array[stop] = temp;
return compars;
}
int quickSortR(int array[], int start, int stop) {
int compars = 0;
int mid = array[stop];
if (start < stop) {
compars = compars + partition(array, start, stop);
quickSortR(array, start, mid - 1);
quickSortR(array, mid+1, stop);
}
return compars;
}
int quickSort(int array[], int n) {
return quickSortR(array, 0, n);
}
/* ----------- end quick sort stuff ----------------- */
【问题讨论】:
-
我建议您花点时间阅读 Eric Lippert 的 How to debug small programs,并了解如何使用 调试器 来捕获 lite 的崩溃。
-
int quickSort(int array[], int n)。这里的n是什么?如果array中的元素数量,那么您在int mid = array[stop];处超出范围 -
是的,n是数组的大小。
-
int mid = array[stop];.. 我认为mid不能像quickSortR(array, start, mid-1);那样使用 -
'我遇到分段错误:11 当我尝试运行此 QuickSort 时,但它编译得很好' - 这是只开发了一半的软件的正常行为,即。编写和构建但未经测试和调试。
标签: c algorithm segmentation-fault quicksort