【发布时间】:2012-05-23 07:22:23
【问题描述】:
我正在尝试修改快速排序算法,并实现一个随机数的枢轴,从而试图避免 O(n^2) 问题。我想使用一个随机数,但我的代码给出了分段错误。
int random (int num) {
int random = rand() % (num - 1);
return random;
}
int* partition (int* first, int* last);
void quickSort(int* first, int* last) {
if (last - first <= 1) return;
int* pivot = partition(first, last);
quickSort(first, pivot);
quickSort(pivot + 1, last);
}
int* partition (int* first, int* last) {
int* pos = (first + random(last - first));
int pivot = *pos;
int* i = first;
int* j = last - 1;
for (;;) {
while (*i < pivot && i < last) i++;
while (*j >= pivot && j > first) j--;
if (i >= j) break;
swap (*i, *j);
}
swap (pos, i);
return i;
}
【问题讨论】:
-
尝试通常的 (random() % range) 来钳制随机数...
-
你使用的是哪个调试器?
标签: c++ algorithm segmentation-fault quicksort