我写的php快速排序函数输出有些问题,帮忙看看
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了我写的php快速排序函数输出有些问题,帮忙看看,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1455字,纯文字阅读大概需要3分钟。
内容图文
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个空值?
回复内容:
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没有报错,而是认为结果是空值继续执行下去了,所以排序的结果中混入了空值
正确:
=$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)));
https://3v4l.org/CIKED
function querySort($arr,$order='asc') {
if (count($arr)<1) {
return $arr;
}
$arr_left = $arr_right = array();
$val = $arr[0]; unset($arr[0]);
foreach ($arr as $key => $value) {
if ($order=='desc') {
if ($value < $val) {
$arr_left[] = $value;
} else {
$arr_right[] = $value;
}
} else {
if ($value > $val) {
$arr_left[] = $value;
} else {
$arr_right[] = $value;
}
}
}
$arr_left = querySort($arr_left,$order);
$arr_right = querySort($arr_right,$order);
return array_merge($arr_left,[$val],$arr_right);
}
$arr = querySort(array(411,21,333,666));
echo "";
var_dump($arr);
应该是array_merge的原因
为啥要这样写排序呢? 内置的数组排序函数可以用啊!
内容总结
以上是互联网集市为您收集整理的我写的php快速排序函数输出有些问题,帮忙看看全部内容,希望文章能够帮你解决我写的php快速排序函数输出有些问题,帮忙看看所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。