我写的php快速排序函数输出有些问题,帮忙看看
本文介绍了我写的php快速排序函数输出有些问题,帮忙看看的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
function qsort($arr){
if(!isset($arr[1])){
return $arr;
}
for ($i=0; $i < count($arr); $i++) {
if($arr[$i+1]<$arr[0]){
$larr[] = $arr[$i+1];
}
if($arr[$i+1]>=$arr[0]){
$rarr[] = $arr[$i+1];
}
}
$larr = qsort($larr);
$larr[] = $arr[0];
$rarr = qsort($rarr);
return array_merge($larr,$rarr);
}
print_r(qsort(array(411,21,333,666)));
输出Array ( [0] => [1] => [2] => 21 [3] => 333 [4] => 411 [5] => 666 )
为什么前面多了2个空值?
解决方案
for循环的结束条件是$i<count,而里面访问的是$i+1,循环到最后访问越界了
然后你一定是关了报错,所以PHP没有报错,而是认为结果是空值继续执行下去了,所以排序的结果中混入了空值
正确:
<?php
function qsort($arr){
if(!isset($arr[1])){
return $arr;
}
$larr = $rarr = array(); //初始化变量,确保它一定存在
for ($i=1; $i < count($arr); $i++) { //不用$i+1,而是修改初始值为1
if($arr[$i]<$arr[0]){
$larr[] = $arr[$i];
}
if($arr[$i]>=$arr[0]){
$rarr[] = $arr[$i];
}
}
$larr = qsort($larr);
$larr[] = $arr[0];
$rarr = qsort($rarr);
return array_merge($larr,$rarr);
}
print_r(qsort(array(411,21,333,666)));
这篇关于我写的php快速排序函数输出有些问题,帮忙看看的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文