排序算法——简单插入排序

1.简答插入排序算法的原理如下:

(1)待排序数组A[0…n-1]分为有序区和无序区,初始状态下整个数组中只有A[0]属于有序区。
(2)从下表为1的元素开始遍历,第i次遍历时,将A[i]插入到有序区某个位置,保持有序区仍然为有序,有序区元素个数加1。
(3)举个栗子,对数组A={3,5,4,0}进行插入排序
初始状态:3,5,4,0
第一步:3,5,4,0
第二步:3,4,5,0
第三步:0,3,4,5
(4)注意和选择排序不同,选择排序是每次从无序部分选择最小元素,而简单插入排序则是每次将无序部分的最开始的元素插入到有序部分的合适位置。

2.程序实现:

void insertSort(int a[],int n)
{
    int elem;
    for(int i=1;i<n;i++)
    {
        elem=a[i];
        while(elem<a[i-1]&&(i-1)>=0)//寻找elem在有序区的位置
        {
            a[i]=a[i-1];//平移元素
            i-=1;
        }
        a[i]=elem;//将elem元素放入合适位置
    }
 }

3.时间复杂度分析:

算法中的基本操作可以认为是比较。
最坏情况下,即数组元素降序排列,第i次遍历,需要比较i次,因此一共需要比较(1+2+…+n-1)=n(n-1)/2次。
所以时间复杂度为O(n^2)。

4.稳定性:

简单插入排序是稳定的。
算法中只有在当前待排序元素a[j]<a[j-1]时才进行平移操作,因此对于2 5 5这种情况,排序后,两个5的相对顺序并不改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值