gpt4 book ai didi

c++ - 快速排序算法(递归)

转载 作者:行者123 更新时间:2023-11-30 04:28:34 25 4
gpt4 key购买 nike

我根据我在 youtube 上看到的算法的可视化演示制作了一个快速排序算法,但我的递归根本不起作用。 :( 如果我注释掉这两行,

quicksort(array,0,start-1);
quicksort(array,start+1,temp);

.. 程序没有崩溃,输出变成2,1,3,5,4 部分正确.. 但是进入递归时崩溃了。整个while循环结束后,开始变得和结束一样。

#include <stdio.h>
#include <conio.h>

void swap(int *a, int *b){

int temp = *a;
*a = *b;
*b = temp;
}

void quicksort(int *array, int start, int end){

int pivot = start;
int temp = end;
while(start != end){

if(pivot==start){
if(array[pivot] > array[end]){
swap(&array[end],&array[pivot]);
pivot = end;
start++;
}
else
end--;
}
else{
if(array[pivot] < array[start]){
swap(&array[start],&array[pivot]);
pivot = start;
end--;
}
else
start++;

}
}

quicksort(array,0,start-1);
quicksort(array,start+1,temp);
}




main(){

int x[5] = {3,1,5,2,4};
int i;
quicksort(x,0,4);
for(i=0;i<5;i++)
printf("%d ", x[i]);
getch();
}

最佳答案

缺少的是取消算法的点。如果检查函数的控制流,您会发现在应用程序可以通过此函数的每条路径上,都会再次调用 quicksort 函数。找出完成的时间很简单。如果参数 startend 相等,您只需要退出函数而不再次调用quicksort。这应该可以解决问题。

关于c++ - 快速排序算法(递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027091/

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