我这个快速排序算法哪里有问题...?

蹭蹭df |浏览1020次
收藏|2019/06/19 07:08

满意回答

2019/06/19 07:31

完全没看懂你的算法,qsort作为经典的算法,基本在任何教程上都可以找到完整的源码,网上也有很多改进过的,但一般都由二个函数组成,排序和分区,你把它们合而为一,但程序的确有问题,我单步了下,先不说效率(你的循环明显多了),你的第一个循环结束,i和j都为0,第二个循环不可能被执行,直接进入第一个递归,参数为 fast(wait, 0, -1); 因为begin<end,直接退出,执行第二个递归,参数为 fast(wait, 0, 9); //因为j=0,end没有变,你会发现与你原始调用一样的,也就是递归死循环了,结果当然是栈溢出建议使用标准的qsort参考int part(int *r,int i, int j){ int flag = r[i]; while(i < j) { while(i < j && r[j] >= flag) j--; if(i < j) r[i++] = r[j]; while(i < j && r[i] <= flag) i++; if(i < j) r[j--] = r[i]; } r[i] = flag; return i;}void fast(int *wait,int low, int high){ int f; if(low < high) { f = part(wait,low, high); fast(wait,low, f - 1); fast(wait,f + 1, high); }}

whoami1978

其他回答(2)
  • 你起码说一下你的思路吧
    回答于 2019/06/19 08:15
  • 第一处wait[0]改成wait[i]第二处fast(wait, j, end);改成fast(wait, j+1, end);
    回答于 2019/06/19 07:56
0人关注该问题
+1

 加载中...