插入排序

插入排序

时间复杂度\(\mathrm{O}(n^2)\)

算法的思路如图所示
1518202-20190409144640119-2146124786.png
将待排序部分分成两个片段,有序片段和待排序片段,每次从待排序片段取一个数,与有序片段进行比较后放入合适位置

代码实现

void insertSort(int *a, size_t size) {
    int i, j;
    for (i = 2; i < size; ++i) {
        if (a[i] < a[i - 1]) {
            a[0] = a[i];
            //这个for循环就是有序序列与待排序元素的比较
            for (j = i - 1; a[j] > a[0]; --j)
                a[j + 1] = a[j];//如果条件不满足,有序元素会不断的向后移位
            a[j + 1] = a[0];//最后将待排序元素放在正确位置
        }
    }
}

这里使用的方法是《大话数据结构》中的实现,将a[0]设置为哨兵,如果有逆序,先将元素放入哨兵,然后与有序片段进行比较,将其插入合适位置

转载于:https://www.cnblogs.com/Anthony-ling/p/10676907.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值