<?php
/*
*冒泡排序
*两两比较相邻元素的大小,发现次序相反即进行交换
*/
function bubbleSort($arr){
$count = count($arr);
if($count <= 0){
return false;
}
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i; $j--){
if($arr[$j] < $arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
return $arr;
}
/*
*选择排序
*每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
*/
function selectSort($arr){
if(!is_array($arr) || count($arr) == 0){
return false;
}
$count = count($arr);
for($i=0; $i<$count; $i++){
$k = $i;
for($j=$i+1; $j<$count; $j++){
if($arr[$k] > $arr[$j]){
$k = $j;
}
}
if($k != $i){
$tmp = $arr[$i];
$arr[$i] = $arr[$k];
$arr[$k] = $tmp;
}
}
return $arr;
}
/*
*插入排序
*在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
*/
function insertSort($arr){
$count = count($arr);
if(!is_array($arr) || $count == 0){
return $arr;
}
for($i=1; $i<$count; $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;
}
$key = $arr[0];
$left_arr = array();
$right_arr = array();
for($i=1; $i<count($arr); $i++){
if($arr[$i] <= $key){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr = quickSort($left_arr);
$right_arr = quickSort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
?>