美文网首页PHP
php排序算法

php排序算法

作者: henryspace | 来源:发表于2018-03-01 16:16 被阅读6次

    冒泡排序

    //循环进行相邻两数比较,大的放后边
    $arr = [2,44,56,23,11,46,69,35];
    function pop_sort($arr){
        $len = count($arr);
        for($i=1; $i<$len; $i++){
            for($j=0; $j<$len-$i; $j++){
                if($arr[$j] > $arr[$j+1]){
                    $tmp = $arr[$j+1];
                    $arr[$j+1] = $arr[$j];
                    $arr[$j] = $tmp;
                }
            }
        }
        return $arr;
    }
    

    选择排序

    //假设每次循环找到最小值依次放进数组
    $arr = [2,44,56,23,11,46,69,35];
    function select_sort($arr)
    {
        $len = count($arr);
        for($i=0; $i<$len-1; $i++){
            $min = $i;
            for($j=$min+1; $j<$len; $j++){
                if($arr[$min] > $arr[$j]){
                    $min = $j;
                }
            }
            if($min <> $i){
                $tmp = $arr[$min];
                $arr[$min] = $arr[$i];
                $arr[$i] = $tmp;
            }
        }
        return $arr;
    }
    

    插入排序

    //将要排序的元素插到假定已经排好序的数组里
    $arr = [2,44,56,23,11,46,69,35];
    function insert_sort($arr)
    {
        $len = count($arr);
        for($i=1; $i<$len; $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;
    }
    

    快速排序

    //从数组取一个数作为标尺,遍历数组小于标尺的放数组a, 大于标尺的放数组b, 递归,最后合并a-标尺-b即可
    function quick_sort($arr)
    {
        $len = count($arr);
        if($len <= 1){
            return $arr;
        }
        $base_num = $arr[0];
    
        $left =[];
        $right =[];
        for($i=1; $i<$len; $i++){
            if($arr[$i] < $base_num){
                $left[] = $arr[$i];
            }else{
                $right[] = $arr[$i];
            }
        }
        $left = quick_sort($left);
        $right = quick_sort($right);
    
        $arr = array_merge($left, [$base_num], $right);
        return $arr;
    }
    

    时间复杂度

    排序方式 最差时间分析 平均时间复杂度 稳定度 空间复杂度
    冒泡排序 O(n2) O(n2) 稳定 O(1)
    快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
    选择排序 O(n2) O(n2) 稳定 O(1)
    二叉树排序 O(n2) O(n*log2n) 不稳定 O(n)
    插入排序 O(n2) O(n2) 稳定 O(1)
    堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
    希尔排序 O O 不稳定 O(1)

    空间复杂度

    空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。

    对于一个算法来说,空间复杂度和时间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。

    有时我们可以用空间来换取时间以达到目的。

    相关文章

      网友评论

        本文标题:php排序算法

        本文链接:https://www.haomeiwen.com/subject/dyibxftx.html