php实现快速排序的问题?

Anew_G 2013-01-03 08:13:08

function quick(&$arr,$low,$high){

$key = $low;

for($i=$low,$j=$high;$i!=$j;){

for(;$j>$key;){

if($arr[$j]<$arr[$key]){

list($arr[$j],$arr[$key])=swap($arr[$j],$arr[$key]);
$key = $j;
break;

}else{

$j--;

}

}

for(;$i<$key;){

if($arr[$i]>$arr[$key]){

list($arr[$i],$arr[$key])=swap($arr[$i],$arr[$key]);
$key = $i;
break;

}else{

$i++;

}

}
}

if($high>$low){

quick($arr,$low,$key-1);
quick($arr,$key+1,$high);

}

}

$arr = array(7,4,9,1,3,2,6,8,0);
quick($arr,0,8);
print_r($arr);


不递归的话单跑一遍正常(去掉if($high>$low)那一段)。一递归就不行了,Chrome转半天,应该是无限递归下去了。请问一下问题出在哪呢?
...全文
415 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anew_G 2013-01-04
  • 打赏
  • 举报
回复
已解决 没有考虑第一位和最后一位的特殊情况,会造成low大于high传入函数,无限循环。

 if($high>$low){ 

        if($key != $low) {
            quick($arr,$low,$key-1);
        }
         
        if($key != $high) {
            quick($arr,$key+1,$high);
        }

    }
Anew_G 2013-01-03
  • 打赏
  • 举报
回复
引用 1 楼 sibang 的回复:
看得我眼冒金星
主要看下


 if($high>$low){ 
 
        quick($arr,$low,$key-1); 
        quick($arr,$key+1,$high);
 
 }

这里,因为我单独测试quick是可以正常运行的。这里就不停递归了。
www_7di_net 2013-01-03
  • 打赏
  • 举报
回复
看得我眼冒金星

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧