<?php
ini_set("error_reporting","E_ALL & ~E_NOTICE");
/**
* 冒泡排序
*/
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]){
$t = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $t;
}
}
}
return $arr;
}
/**
* 选择排序
* 把最小的数往最前放(从小到大排序)
*/
function selectSort($arr) {
$len = count($arr);
for($i=0; $i<$len-1; $i++){
$flag = $i;
for($j=$i+1; $j<$len; $j++){
if($arr[$flag] > $arr[$j]) $flag = $j;
}
if($flag != $i){
$t = $arr[$flag];
$arr[$flag] = $arr[$i];
$arr[$i] = $t;
}
}
return $arr;
}
/**
* 插入排序
* 假设前面的元素已经排好序
*/
function insertSort($arr) {
$len = count($arr);
for($i=1; $i<$len; $i++){
$key = $arr[$i];
for($j=$i; $j>0 && $arr[$j-1]>=$key; $j--) {
$arr[$j] = $arr[$j-1];
}
$arr[$j] = $key;
}
return $arr;
}
/**
* 二分插入排序
*/
function binaryInsertSort($arr){
$len = count($arr);
for($i=1; $i<$len; $i++){
$key = $arr[$i];
$low = 0;
$high = $i-1;
while($low <= $high){
$mid = intval(($low + $high)/2);
if($key >= $arr[$mid]){
$low = $mid+1;
}
else{
$high = $mid-1;
}
}
for($j=$i-1; $j>=$low; $j--){
$arr[$j+1] = $arr[$j];
}
$arr[$low] = $key;
}
return $arr;
}
/**
* 快速排序
*/
function quickSort1($left, $right, &$arr) {
if ($left > $right) return;
$temp = $arr[$left];
$i = $left;
$j = $right;
while ($i != $j) {
while ($arr[$j] >= $temp && $i < $j) $j--;
while ($arr[$i] <= $temp && $i < $j) $i++;
if($i < $j) {
$t = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $t;
}
}
$arr[$left] = $arr[$i];
$arr[$i] = $temp;
quickSort1($left, $i-1, $arr);
quickSort1($i+1, $right, $arr);
}
function quickSort2($arr) {
if(!is_array($arr)) return false;
$len = count($arr);
if($len <= 1) return $arr;
$left = $right = array();
for($i=1; $i<$len; $i++) {
if($arr[$i] > $arr[0]) {
$right[] = $arr[$i];
} else{
$left[] = $arr[$i];
}
}
$left = quickSort2($left);
$right = quickSort2($right);
return array_merge($left, array($arr[0]), $right);
}
$a = array(0,8,3,6,4,2,9,8,45,0,-1,-2);
//quickSort1 (0, 8, $a);
//$a = quickSort2 ($a);
//$a = bubbleSort($a);
//$a = selectSort($a);
$a = binaryInsertSort($a);
foreach ($a as $key => $value) {
echo $value.' ';
}