早上起來,花了點時間寫了一下PHP的冒泡排序和快速排序,作爲對以前知識的複習。
冒泡排序:
<?
function bubble_sort($array) {
$size = count($array);
if ($size <= 1) {
return $array;
}
for ($i=0; $i<$size; $i++) {
// 開始冒泡,從末尾開始,小的元素浮上來
for ($j=$size-1; $j>$i; $j--) {
if ($array[$j] < $array[$j-1]) {
$temp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $temp;
}
}
}
return $array;
}
$array = array(10, 1, 4, 6, 8, 2, 333, 5, 65, 90);
print_r(bubble_sort($array));
快速排序:
<?php
function quick_sort($array) {
$size = count($array);
if ($size <= 1) {
return $array;
}
// 首元素作爲比較對象
$key = $array[0];
$left = array();
$right = array();
// 小的放左邊, 大的放右邊
for ($i=1; $i<$size; $i++) {
if ($array[$i] < $key) {
$left[] = $array[$i];
} else {
$right[] = $array[$i];
}
}
// 遞歸處理左邊和右邊
$left = quick_sort($left);
$right = quick_sort($right);
// 歸併
$array = array_merge($left, array($key), $right);
return $array;
}
$array = array(10, 1, 4, 6, 8, 2, 333, 5, 65, 90);
pr(quick_sort($array));
快速排序還有幾個變種,例如:隨機化快速排序,平衡快速排序,外部快速排序,三路基數快速排序,在今後的日子裏,慢慢研究它們。