布尔变量 $exchange, 用来监视每($i+1)次冒泡排序是否发生过相邻元素交换的情况。如果有($exchange为true),则需继续进行下一次冒泡排序。如果没有发生过相邻元素交换的情况,则说明排序
<meta charset="gb2312" /> <?PHP //数组元素值从小到大排序 $arr=array(1,42,0,3,15,7,19,26); foreach($arr as $k=>$v) echo " index:$k -- value:$v<br>"; echo "<hr color=red />"; echo "After applying sort() <br>"; $ar=$arr; //定义一个中间变量 sort($ar); print_r($ar); echo '<br><hr color=red />'; echo "使用 冒泡排序"; $temp=0; //外层循环的次数 for($i=0;$i<count($arr)-1;$i++){ $exchange=false; //内层之间向右相邻的两个数组元素值进行比较 for($j=0;$j<count($arr)-1-$i;$j++){ //当后一个数组元素值大于前一个数组原数值 if($arr[$j]>$arr[$j+1]){ //数组元素交换 $temp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$temp; $exchange=true; } } //外层数组循环的次数是---count($arr)-1 //-1的原因(数组元素值比较时是两个比较 //如3个数组元素比较2次 echo "这是第".($i+1)."次比较的结果"; echo "<pre/>"; print_r($arr); echo "<pre/>"; if (!$exchange) break; } echo "<hr color=red />"; echo "<pre/>"; print_r($arr); echo "<pre/>" ?>