- 冒泡排序
$arr = range(1,20);
shuffle($arr);
function bubbleSort($arr) {
$len = count($arr);
for ($i=1;$i<$len;$i++) {
for ($j=0;$j<$len-$i;$j++) {
if($arr[$j] > $arr[$j+1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}
$arr = bubbleSort($arr);
print_r($arr);
exit;
- 选择排序
$arr = range(1,20);
shuffle($arr);
function selectSort($arr)
{
$len = count($arr);
for ($i = 0; $i < $len - 1; $i++) {
$p = $i;
for ($j = $i + 1; $j < $len; $j++) {
if ($arr[$p] > $arr[$j]) {
$p = $j;
}
}
if ($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
return $arr;
}
$arr = selectSort($arr);
print_r($arr);
exit;
- 插入排序
$arr = range(1,20);
shuffle($arr);
function insertSort($arr)
{
$len = count($arr);
for ($i = 1; $i < $len; $i++) {
$tmp = $arr[$i];
for ($j = $i - 1; $j >= 0; $j--) {
if ($arr[$j] > $tmp) {
$arr[$j + 1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
$arr = insertSort($arr);
print_r($arr);
exit;
- 快速排序
$arr = range(1,20);
shuffle($arr);
function quickSort($arr)
{
if (count($arr) <= 1) {
return $arr;
}
$len = count($arr);
$left = $right = [];
for ($i = 1; $i < $len; $i++) {
if ($arr[$i] < $arr[0]) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left, array($arr[0]), $right);
}
$arr = quickSort($arr);
print_r($arr);
exit;
- 归并排序
$arr = range(1,20);
shuffle($arr);
function mergeSort($arr)
{
$len = count($arr);
if ($len <= 1) {
return $arr;
}
$mid = intval($len / 2);
$left = array_slice($arr, 0, $mid);
$right = array_slice($arr, $mid);
$left = mergeSort($left);
$right = mergeSort($right);
$arr = merge($left, $right);
return $arr;
}
function merge($arrA, $arrB)
{
$arrC = array();
while (count($arrA) && count($arrB)) {
$arrC[] = $arrA[0] < $arrB[0] ? array_shift($arrA) : array_shift($arrB);
}
return array_merge($arrC, $arrA, $arrB);
}
$arr = mergeSort($arr);
print_r($arr);
exit;