您的位置:首页 > 编程语言 > PHP开发

php 排序算法

2015-10-19 21:23 651 查看
冒泡排序

排序 n 个项目要Ο(n²)次比较,在最坏状况下则需要Ο(n²)次比较

function maopao($arr)
{
$len = count($arr);
//从小到大
for($i=1;$i<$len;$i++)
{
for($j=$len-1;$j>=$i;$j--)
if($arr[$j]<$arr[$j-1])
{//如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了
$tmp=$arr[$j];
$arr[$j]=$arr[$j-1];
$arr[$j-1]=$tmp;
}
}
$arr=array('3','8','1','4','11','7');
print_r(maopao($arr));


快速排序

排序 n 个项目要Ο(n log n)次比较,在最坏状况下则需要Ο(n2)次比较

// 快速排序
function kuaisu($arr){
$len = count($arr);
if($len <= 1){
return $arr;
}
$key = $arr[0];
$left_arr = array();
$right_arr = array();
for($i=1; $i<$len;$i++){
if($arr[$i] <= $key){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr = kuaisu($left_arr);
$right_arr = kuaisu($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
$arr = array(23,98,54,2,9,62,34);
print_r(kuaisu($arr));




归并排序和堆排序、快速排序的比较

若从空间复杂度来考虑:首选堆排序,其次是快速排序,最后是归并排序。

若从稳定性来考虑,应选取归并排序,因为堆排序和快速排序都是不稳定的。

若从平均情况下的排序速度考虑,应该选择快速排序。

二维数组排序

1、使用array_multisort();

array_multisort(排序数组字段值的一维数组,待排序二维数组);

2、

<?php
function array_sort_by_any_row($array_name, $row_id, $order_type){
$array_temp=array();
foreach($array_name as $key=>$value){
$array_temp[$key]=$value[$row_id];
}
if($order_type==="ASC"){ //顺序
asort($array_temp);
} else {
arsort($array_temp);
}
$result_array=array();
foreach($array_temp as $key=>$value){
$result_array[$key]=$array_name[$key];
}
return $result_array;
}

$arr = array(array('num'=>5, 'value'=>6),
array('num'=>2, 'value'=>39),
array('num'=>36, 'value'=>29)
);

$sortarr = array_sort_by_any_row($arr, 'num', 'ASC');
print_r($sortarr);
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 排序算法