gpt4 book ai didi

c - 快速排序实现的问题,数组作为函数的参数

转载 作者:行者123 更新时间:2023-11-30 15:35:17 24 4
gpt4 key购买 nike

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 停止。

我是数组和递归的新手,请帮助我,我真的很茫然。

最佳答案

我解决了这个问题,调用不正确导致这种情况成为可能。

        7         8

临时开始^

临时结束....^

然后调用的是:

qsort(array, start, temp_start)//start 和 temp_start 相等,调用后 qsort 返回

        7

临时开始^

临时结束....^

//第二次调用

qsort(array, temp_start, end)

7 8

临时开始^

结束........................^

因此第二个 qsort 调用将永远不会返回,它将再次从头开始结束场景:

//第一次调用

        7

临时开始^

临时结束....^

//第二次调用

        7         8

临时开始^

临时结束......................^

第二个 qsort 调用更改为:

qsort(array, temp_start + 1, end);

解决了问题并给出了正确的程序输出。

enter image description here

关于c - 快速排序实现的问题,数组作为函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com