zoukankan      html  css  js  c++  java
  • 快速排序算法分析解析

    快速排序算法的时间复杂度和各次标准数据元素的值关系很大。如果每次选取的标准元素都能均分两个子数组的长度,这样的快速排序过程是一个完全二叉树结构。(即每个结点都把当前数组分成两个大小相等的数组结点,n个元素数组的根结点的分解次数就构成一棵完全二叉树)。这时分解次数等于完全二叉树的深度log2n;每次快速排序过程无论把数组怎样划分、全部的比较次数都接近于n-1次,所以最好情况下快速排序算法的时间复杂度为O(nlog2n):快速排序算法的最坏情况是数据元素已全部有序,此时数据元素数组的根结点的分需次数构成一棵二叉退化树(即单分支二叉树),一棵二叉退化树的深度是n,所以最坏情况下快速排序算法的时间复杂度为O(n2)。般情况下 ,标准元素值的分布是随机的,数组的分邮大数构成模二又树,这样的二叉树的深度接近于log2n, 所以快速排序算法的平均(或称期望)时间复杂度为O(nlog2n)

    function findKey(&$arr, $low, $hight)
    {
        $target = $arr[$low];
        while ($low < $hight) {
    
            while ($low < $hight && $target < $arr[$hight]) {
                $hight--;
            }
            $arr[$low] = $arr[$hight];
            while ($low < $hight && $target > $arr[$low]) {
                $low++;
            }
            $arr[$hight] = $arr[$low];
        }
        $arr[$hight]=$target;
        return $hight;
    }
    function quickSort(&$arr,$low,$hight){
        $posKey=findKey($arr,$low,$hight);
        if($low<$posKey){
            quickSort($arr,$low,$posKey-1);
        }
        if($posKey<$hight){
            quickSort($arr,$posKey+1,$hight);
        }
    }
    $arr = [12, 56, 98, 32, 16, 34, 2, 9, 1];
    
    $len = count($arr);
    quickSort($arr, 0, $len - 1);
    var_dump($arr);die;
  • 相关阅读:
    函数指针的调用方式
    C++构造函数和析构函数顺序
    往android主项目中添加辅助项目
    Qt每次运行都是重新编译问题
    函数参数检验的研究
    动态链接库和静态链接库的区别(未完待续)
    MySQL 查看最大连接数, 当期连接数.
    Linux 命令
    Ext treelist 动态切换TreeStore
    Java 日期加减计算.
  • 原文地址:https://www.cnblogs.com/friendwrite/p/10393255.html
Copyright © 2011-2022 走看看