快速实现的问题,数组作为函数的参数

时间:2014-04-10 18:31:15

标签: c

enter image description here

首先是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停止。

我是阵列和递归的新手,请帮助我真的在这里失去。

1 个答案:

答案 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);

解决问题并提供正确的程序输出。

enter image description here