冒泡排序,是一种简单的排序算法。其基本原理是通过重复地遍历要排序的数列,一次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。这个过程会一直重复进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。虽然冒泡排序的实现较为简单,但其效率并不高,特别是对于大数据量的排序,其时间复杂度较高。

php实现代码

function maoPao($arr){
    $num = count($arr);
    for($i=0;$i<=$num-1;$i++){
        for($j=0;$j<$num-$i-1;$j++){
            if($arr[$j]>$arr[$j+1]){
                $temp = $arr[$j];
                $arr[$j]=$arr[$j+1];
                $arr[$j+1]=$temp;
            }
        }
    }
    return $arr;
}


快速排序则是对冒泡排序的一种改进,是一种非常重要的且应用广泛的高效率排序算法。快速排序的基本思想是通过一次排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。在平均情况下,快速排序的时间复杂度为O(log2n),这使其在处理大数据量时具有显著的优势。

php实现代码

function quickSort($arr){
    //递归出口
    if(!isset($arr[1])){
        return $arr;
    }
    //第一个弹出
    $mid = array_shift($arr);
    //把刚才弹出的放到一个数组
    $midArray = array($mid);
    //定义左右空数组
    $leftArray = array();
    $rightArray = array();
    foreach($arr as $v){
        if($v>$mid){
            $rightArray[]=$v;
        }else{
            $leftArray[]=$v;
        }
    }
    //递归调用
    return array_merge(quickSort($leftArray),$midArray,quickSort($rightArray));
}

两张排序方法的时间对比

$arr = array_rand(range(1,10000), 10000);   //生成一个测试的数组

shuffle($arr);  //打乱顺序
$t1 = microtime(true);
maoPao($arr);   //冒泡
$t2 = microtime(true);
echo '冒泡排序用时: '.(($t2-$t1)*1000).'ms<br/>';


$t1 = microtime(true);
quickSort($arr);  //快速排序
$t2 = microtime(true);
echo '快速排序用时: '.(($t2-$t1)*1000).'ms';

结果

冒泡排序用时: 934.58890914917ms
快速排序用时: 6.5391063690186ms