排序算法-插入排序

输入(Input):     n个数的一个系列<A1, A2......An-1,An>,如输入3,5,1,8,7,6,4,2

输出(Output):  一个有序的排列,满足A1<A2<A3......An-1<An ,输出1,,2,3,4,5,6,7,8

插入排序的工作方式类似于排序一手扑克牌,刚开始的时候我们左手的牌的数目为0,然后一张张的从台面上拿起牌并有序的插入到左手中,如下图


如上图所示,为了将牌插入到正确的位置,需要将左手已经排好顺序的每张牌依次从右到左与将要插入的牌作对比,当第一次找到比将要插入的牌小的时候,则将牌插入这张牌的后面(右边),下面是这个将牌插入正确位置的伪代码(下面的1-8行伪代码来源于《算法导论》);


第1行:J表示正在插入到手中的当前牌,因为拿第一张牌不需要比较(想想从桌面上拿第一章牌时的情景),所以j值取2到A.length
       for循环依次取桌面的牌
第2行:key临时存储正在插入的牌(值)
第4行:J-1表示左手中已经排好序的最右边的牌(最大的牌)
第5,6,7行:while循环查找插入的正确位置。while i>1 and A[1..j-1],实际上应该是i>=1,否则的
          话,最左边的牌(在数组的最低位)会跳过比较,如输入【2,6,1,8,5,4,7】输出结果
          会是【2,1,3,4,5,6,7,8】
第8行:将牌(值)插入

下面是c代码实现


加入main和打印函数测试:

编译:

执行并查看是否达到要求:

ok !





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值