1. 冒泡排序
思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
<?php
function bubbleSort($arr)
{
$length = count($arr);
for ($i=1; $i < $length; $i++) {
for ($k=0; $k < $length-$i; $k++) {
if ($arr[$k]>$arr[$k+1]) {
$tmp = $arr[$k+1];
$arr[$k+1] = $arr[$k];
$arr[$k] = $tmp;
}
}
}
return $arr;
}
$arr = array(1,43,54,62,21,66,32,78,36,76,39);
var_dump(bubbleSort($arr));
?>
2.快速排序
思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
<?php
function quickSort($arr)
{
$length = count($arr);
if ($length <= 1) {
return $arr;
}
$base_num=$arr[0];
$left_array=array();
$right_array=array();
for ($i=1; $i < $length; $i++) {
if ($base_num>$arr[$i]) {
$left_array[]=$arr[$i];
}else{
$right_array[]=$arr[$i];
}
}
$left_array = quickSort($left_array);
$right_array = quickSort($right_array);
return array_merge($left_array,array($base_num),$right_array);
}
$arr = array(1,43,54,62,21,66,32,78,36,76,39);
var_dump(quickSort($arr));
?>