• 浅谈算法——快速排序性能分析


    上篇文章介绍了一下基本的冒泡排序,今天介绍一下快速排序。

    function QuickSort($_array)
    {
        if (count($_array)<=1)  
        {   
            return $_array;
        }   
        $key = $_array[0];
        $left_array = $right_array = array();
        for ($i=1;$i<count($_array);$i++)
        {   
            if ($_array[$i] > $key)
            {   
                $right_array[] = $_array[$i];
            }   
            else 
            {   
                $left_array[] = $_array[$i];
            }   
        }   
        $left_array = QuickSort($left_array);
        $right_array = QuickSort($right_array);
        return array_merge($left_array,array($key),$right_array);
    }
    /*
      * 生成随机数组
     */
    function rand_array($_num)
    {
        for($i=0;$i<$_num;$i++)
        {   
            $array[$i] = rand(0,$_num*10);
        }   
        return $array;
    }
    $rand_array = rand_array(10000);
    $start = time();
    $result = QuickSort($rand_array);
    $end = time();
    print_r($result);
    echo "快速排序需要的时间" . ($end - $start) . "秒;";
    ?>

    冒泡排序需要好几十秒的时间,但是快速排序只需要1秒钟的时间。

    性能分析

    快速排序快速排序快速排序快速排序:它同样是冒泡排序的改进,它通过一次交换能消除多个逆序,这样可以减少逆序时所消耗的扫描和数据交换次数。在最优情况下,它的排序时间复杂度为O(nlog2n)。 即每次划分序列时,能均匀分成两个子串。但最差情况下它的时间复杂度将是O(n^2)。即每次划分子串时,一串为空,另一串为m-1(程序中的100K正 序和逆序就正是这样,如果程序中采用每次取序列中部数据作为划分点,那将在正序和逆时达到最优)。从100K中正序的结果上看“快速排序”会比“冒泡排 序”更慢,这主要是“冒泡排序”中采用了提前结束排序的方法。有的书上这解释“快速排序”,在理论上讲,如果每次能均匀划分序列,它将是最快的排序算法, 因此称它作快速排序。虽然很难均匀划分序列,但就平均性能而言,它仍是基于关键字比较的内部排序算法中速度最快者。  

    参考:http://blog.csdn.net/v_JULY_v/article/details/6211155

  • 相关阅读:
    数据结构 B/B+树
    Hadoop的目录结构
    安装JDK
    OSTEP-projects concurrency-webserver
    第二十四章(制作HTTP服务器端)学习笔记
    day4_生成小数的程序
    day4_用集合生成8位密码的程序
    day4_集合操作
    day3_homework
    day6_random模块的用法、break和continue
  • 原文地址:https://www.cnblogs.com/liqiu/p/2914229.html
Copyright © 2020-2023  润新知