活动地址:CSDN21天学习挑战赛
目录
一、前言
二、直接插入排序思想
三、直接插入排序待解决的问题
四、实例
五、算法性能分析
六、总结
一、前言:
插入排序算法:直接插入排序算法和希尔排序,本文主要介绍直接插入排序算法
二、直接插入排序的基本思想
1、 基本思想:在插入第i个元素时,前(i-1) 个元素已经有序。
三、直接插入排序待解决的问题
1、如何构造初始的有序序列
将第一个记录看成有序序列,从第二个记录开始依次将元素插入到有序序列中。
算法描述:
for(i=2;i<=n;i++)
{
插入第i个记录;
}
2、如何将待插入元素插入相应位置
在有序区(r[1]~r[i-1])中插入r[i],首先找到第i个记录的正确插入位置,然后将r[i]插入到有序序 列中
算法描述:
r[0]=r[i] j=i-1;
while(r[0]<r[j])
{
r[j+1]=r[j];
j--;
}
3、思考
r[0]的作用:
(1)在查找嘻哈如位置的循环中r[0]起到监视哨(或者监视哨兵的作用)
(2) r[0]暂存r[i]的元素,避免了因元素的后移覆盖r[i]的值
四、实例
输入:2 4 6 8 0 14 12 16
输出从小到大的序列:0 2 4 6 8 12 14 16
代码:
运行结果:
五、算法性能分析
最好情况(正序):例如1、2、3、4、5、6
比较次数:n-1 (共有n个元素)
移动次数:2(n-1)
时间复杂度:O(n)
最差情况(逆序):例如6、5、4、3、2、1
时间复杂度:O(n^2)
平均情况:O(n^2)
六、总结
直接插入排序算法简单、容易实现,适用于排序序列元素数目少或者待排序序列元素基本有序
若待排序的元素数量较多,则大量的比较和移动会使排序效率很低。