<?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); } ?>