一个关于选择排序的php程序问题,请各位大神帮忙看看这个程序为什么不能对数组排序啊?谢谢各位了。

<?php
//选择排序
function selectSort(&$myarr){
$temp=0;
for($i=0;$i<count($myarr)-1;$i++){
$minVal=$myarr[$i];
$minIndex=$i;
for($j=$i+1;$j<count($myarr);$j++){
if($minVal>$myarr[$j]){
$minVal=$myarr[$j];
$minIndex=$j;
}
}
$temp=$myarr[$i];
$myarr[$i]=$minVal;
$minVal=$temp;
}

}
function insertSort(&$myarr){
for($i=0;$i<count($myarr);$i++){

}
}
$arr=array(0,5,-1);
selectSort($arr);
print_r($arr);
?>
输出结果为:Array ( [0] => -1 [1] => -1 [2] => -1 )

最后交换变量的地方有错,修改正确的代码如下:

<?php
  //选择排序
  function selectSort(&$myarr){
    $temp=0;
    for($i=0;$i<count($myarr)-1;$i++){
      $minVal=$myarr[$i];
      $minIndex=$i;
      for($j=$i+1;$j<count($myarr);$j++){
        if($minVal>$myarr[$j]){
          $minVal=$myarr[$j];
          $minIndex=$j;
        }
      }
      if ($minIndex!=$i){
        $temp=$myarr[$i];
        $myarr[$i]=$minVal;
        $myarr[$minIndex]=$temp;
      }
    }
  }
  $arr=array(0,5,-1);
  selectSort($arr);
  print_r($arr);
?>追问

恩,谢谢回答,可是你能告诉我我这样写为什么错了吗?$myarr[$minIndex]的值不就是$minVal吗?

追答

值相同,但是两个变量,在内存中是不同的区间,需要交换数组的变量,你交换临时空间是不对的。

追问

那您的意思是$myarr[$minIndex]的空间是数组,而$minVal是在内存中?数组的值只能和数组的值交换,而不能和变量交换吗?

追答

$myarr[$minIndex]是调用函数的那个参数实际的数组(本例是$arr),$minVal是函数运行时刻在堆栈中临时分配的空间,在函数运行结束就消失(再次分配给其它函数),对它的修改不影响调用函数的那个参数所指向的变量(本例是$arr)。

当然都是内存,可以理解为客厅的柜子和卫生间的柜子。

追问

我是个php新手,虽然看不太明白,但是我会好好想想的,很谢谢你,采纳你的答案了

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网