首先是qsort.c,然后是main.c.他们有不同的文件。
void qsort(int array[], int start, int end){
int temp_start = start, temp_end = end;
int part = array[start];
if(start >= end){
return;
}
while(temp_end > temp_start){
for(temp_end; array[temp_end] >= array[temp_start] && temp_end > temp_start; temp_end --);
array[temp_start] = array[temp_end];
for(temp_start; array[temp_start] < part && temp_end > temp_start; temp_start++);
array[temp_end] = array[temp_start];
}
array[temp_start] = part;
qsort(array, start, temp_start);
qsort(array, temp_start, end);
}
=============================================== ==================================
#define MAX 7
#define START_POS 0
#define END_POS (MAX - 1)
void qsort(int array[], int start, int end);
void show(int array[], int size);
void random_input(int array[], int size);
int main(){
int array[MAX];
random_input(array, MAX);
show(array, MAX);
qsort(array, START_POS, END_POS);
show(array, MAX);
return 0;
}
我将数组传递给qsort,但显然我无法修改其内容。使用调试器,我发现每当发出数组上的变量时,调试器上都不会显示任何更改。
我不知道发生了什么,如果我让它停止一段时间程序最终会被Windows停止。
我是阵列和递归的新手,请帮助我真的在这里失去。
答案 0 :(得分:1)
我解决了,电话不正确使得这种情况成为可能。
7 8
temp_start ^
... temp_end ^
然后打电话:
qsort(array, start, temp_start)
// start和temp_start相等,调用qsort后返回
7
temp_start ^
... temp_end ^
//和第二次电话
qsort(array, temp_start, end)
7 8
temp_start ^
结束......................... ^
所以第二个qsort调用永远不会返回,它将从头开始再次结束:
//首先打电话
7
temp_start ^
... temp_end ^
//第二次电话
7 8
temp_start ^
temp_end ..................... ^
将第二次qsort调用更改为:
qsort(array, temp_start + 1, end);
解决问题并提供正确的程序输出。