陣列 [1,43,54,62,21,66,32,78,36,76,39] 升序排序四種寫法:
function bubbleSort($arr) {
$n=count($arr);
for($i=1;$i<$n;$i++)
for($k=0;$k<$n-$i;$k++)
if($arr[$k]>$arr[$k+1]) [$arr[$k],$arr[$k+1]] = [$arr[$k+1],$arr[$k]];
return $arr;
}
function selectSort($arr) {
$n=count($arr);
for($i=0;$i<$n-1;$i++) {
$p=$i;
for($j=$i+1;$j<$n;$j++) if($arr[$p]>$arr[$j]) $p=$j;
if($p!=$i) [$arr[$i],$arr[$p]] = [$arr[$p],$arr[$i]];
}
return $arr;
}
function insertSort($arr) {
$n=count($arr);
for($i=1;$i<$n;$i++) {
$tmp=$arr[$i];
for($j=$i-1;$j>=0;$j--) {
if($tmp<$arr[$j]) [$arr[$j+1],$arr[$j]] = [$arr[$j],$tmp];
else break;
}
}
return $arr;
}
function quickSort($arr) {
if(count($arr)<=1) return $arr;
$base=$arr[0]; $left=$right=[];
for($i=1;$i$arr[$i] ? $left[]=$arr[$i] : $right[]=$arr[$i];
return array_merge(quickSort($left), [$base], quickSort($right));
}
時間複雜度:冒泡/選擇/插入 O(n²),快速排序平均 O(n log n)。實務上直接用 sort()/usort()。