早上起来,花了点时间写了一下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));
快速排序还有几个变种,例如:随机化快速排序,平衡快速排序,外部快速排序,三路基数快速排序,在今后的日子里,慢慢研究它们。