冒泡排序:相邻值比较。将最大值放到底部,最小值排序到顶部。
复杂度,稳定性见文末。
<?php
//简单冒泡排序
function bubblesort(&$arr){ //引用传递&$arr
$len = count($arr);
for($i=0;$i<$len-1;$i++){ //总共需要几轮循环
//echo $i.'<br>';
for($j=0;$j<$len-$i-1;$j++){ //每次循环中的比较次数
if($arr[$j]>$arr[$j+1]){
list($arr[$j+1],$arr[$j]) = array($arr[$j],$arr[$j+1]);//可以自写swap函数
}
}
}
}
//冒泡排序进化之鸡尾酒排序
function cocktailsort(&$arr){
$left = 0;
$right = count($arr)-1;
while($left<$right){
for($i=$left;$i<$right;$i++){ //将最大值放到下标最大位置
if($arr[$i]>$arr[$i+1]){
list($arr[$i+1],$arr[$i]) = array($arr[$i],$arr[$i+1]);
}
}
$right--; //右侧下标减一,下次不进行排序
for($j=$right;$j>$left;$j--){ //将最小值放到下标最小位置
if($arr[$j]<$arr[$j-1]){
list($arr[$j-1],$arr[$j]) = array($arr[$j],$arr[$j-1]);
}
}
$left++; //左侧下标加一,下次不进行排序
}
}
$arr = array(19,22,14,6,88,4,35,23);
//bubblesort
cocktailsort($arr);
print_r($arr);
?>
各种内部排序的复杂度,稳定性。
图片来源自网络。