当我尝试运行此快速排序时,我遇到了分段错误: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 ----------------- */
使用数组的元素数作为stop
参数调用quicksort
,但将枢轴初始化为int pivot = array[stop];
。 您正在读取数组的末尾。未定义的行为。
代码中可能还有其他问题,但仅此一项就可以解释崩溃。
当我
尝试运行此快速排序时,我遇到了分段错误:11,但它编译正常
请注意:程序编译意味着编译器了解您希望程序做什么。编译器绝不检查程序所做的是否有意义。 如果它知道你想做什么,为什么它不自己编写程序呢?