zoukankan      html  css  js  c++  java
  • 浅谈算法——插入排序性能分析

    前两天看得是快速排序和冒泡排序,今天学习一下插入排序,可以说插入排序比前两种方便很多。

    /**
     * 插入排序
     */
    function insert_sort2($_array)
    {
        for($i=0;$i<count($_array);$i++)
        {   
            $key = $_array[$i];
            for($j=$i;$j>0;$j--)
            {   
                if ($key<$_array[$j-1])
                {   
                    $_array[$j] = $_array[$j-1];
                }   
                else
                {   
                    break;
                }   
            }   
            $_array[$j] = $key;
        }   
        return $_array;
    
    }
    
    
    /*
      * 生成随机数组
     */
    function rand_array($_num)
    {
        for($i=0;$i<$_num;$i++)
        {   
            $array[$i] = rand(0,$_num*10);
        }   
        return $array;
    }
    $rand_array = rand_array(100);
    print_r($rand_array);
    $start = time();
    $result = insert_sort2($rand_array);
    $end = time();
    print_r($result);
    echo "插入排序需要的时间" . ($end - $start) . "秒;";

    测试:8秒钟,明显比冒泡排序快很多,但是比快速排序要是慢一些,这是因为在冒泡排序下是进行值交换,而在插入排序下是值移动,所以直接插入排序将要优于冒泡排序,时间在3倍左右。

    性能分析:

    如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。

  • 相关阅读:
    编译原理 实例
    lex yacc flex bison
    图解tensorflow 源码分析
    PostgreSQL 179个场景 案例集锦
    github view source
    Java 微服务实践
    Linux kernel AIO
    Lex与Yacc学习
    OpenResty 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台
    nginx Architecture
  • 原文地址:https://www.cnblogs.com/liqiu/p/2915268.html
Copyright © 2011-2022 走看看