美文网首页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常用数组排序算法

    title: PHP常用数组排序算法tags: [PHP,数组,排序,算法] 这几天写到的代码中,用到了许多对数组...

  • 算法系列教程(PHP演示)

    算法系列教程-四大排序算法(PHP演示) 冒泡 冒泡排序原理...

  • 常用的排序算法

    常用的排序算法(PHP实现)_慕课手记

  • PHP常见排序算法及排序效率

    php 四种排序算法的时间与内置的sort排序比较 3000个元素,四种算法的排序所用的时间比较 冒泡排序 857...

  • PHP算法系列教程(一)-四大排序算法

    PHP算法系列教程(一)-四大排序算法 冒泡 冒泡排序原理图 选择 选择排序原理图 插入 插入排序原理图 快排 快...

  • PHP数组的排序算法--冒泡排序

    PHP数组的排序算法--冒泡排序 标签: php 冒泡排序 原理:遍历一个数组,在此过程中,将相邻的两个单元的值进...

  • php排序算法

    冒泡排序 选择排序 插入排序 快速排序 时间复杂度 空间复杂度 空间复杂度(Space Complexity)是对...

  • PHP排序算法

    排序算法 冒泡排序(数组排序) 快速排序(数组排序) 参考 http://www.cnblogs.com/enia...

  • PHP排序算法

    冒泡排序法在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较...

  • 算法总结

    1.使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 //冒泡排序(数组排序) function bubb...

网友评论

    本文标题:php排序算法

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