浅谈算法——插入排序性能分析

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

/**
 * 插入排序
 */
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)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。

原文地址:https://www.cnblogs.com/liqiu/p/2915268.html