您好,匿名用户
随意问技术百科期待您的加入

php实现快速排序的问题?

0 投票
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转半天,应该是无限递归下去了。请问一下问题出在哪呢?

用户头像 提问 2013年 11月7日 @ Sion 上等兵 (319 威望)
分享到:

1个回答

0 投票
 
最佳答案

已解决

没有考虑第一位和最后一位的特殊情况,会造成low大于high传入函数,无限循环。

if($high>$low){ 
 
        if($key != $low) {
            quick($arr,$low,$key-1);
        }
          
        if($key != $high) {
            quick($arr,$key+1,$high);
        }
 
    }
用户头像 回复 2013年 11月7日 @ Zed 上等兵 (260 威望)
选中 2013年 9月7日 @Sion
提一个问题:

相关问题

0 投票
1 回复 40 阅读
用户头像 提问 2012年 12月1日 @ Morgana 上等兵 (251 威望)
0 投票
1 回复 32 阅读
0 投票
1 回复 1,638 阅读
+1 投票
1 回复 101 阅读
0 投票
1 回复 24 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...