您的位置:首页 > 其它

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

2013-02-18 10:31 246 查看
前两天看得是快速排序和冒泡排序,今天学习一下插入排序,可以说插入排序比前两种方便很多。

/**
* 插入排序
*/
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)。因而,插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐