【发布时间】:2018-09-16 21:39:01
【问题描述】:
我使用quicksort 来查看它订购大数组的速度有多快。
我订购了 100 万没有问题.. 200 万没有问题。 300万给出一个段错误。一些测试显示它在 200 万到 210 万之间崩溃,而 GDB 显示崩溃来自“填充”函数。
这是代码:
int partition(int v[], int N){
int i, j;
int x = v[N-1];
for(i = 0, j = 0; i < N - 1; i++){
if (v[i] < x) swap(v, j++, i);
}
swap(v, j, N - 1);
return j;
}
void quickSort(int v[], int N){
int p;
if (N > 1){
p = partition(v, N);
quickSort(v, p);
quickSort(v + p + 1, N - p - 1);
}
}
void fill(int v[], int N){
srand(clock());
for(int i = 0; i < N; i++){
v[i] = rand();
}
}
int main() {
int size = 3000000;
int v[size];
fill(v, size);
printf("ready\n\n");
quickSort(v, size);
for(int i = 0; i < size; i++)
printf("%d ", v[i]);
printf("\n\nDone\n\n");
return 0;
}
代码在该特定数字处开始崩溃是否有任何特殊原因? 谢谢大家的解答
【问题讨论】: