【1】算法导论——插入排序

2.1 插入排序 基本原理类似扑克码牌


for循环以 j 变量遍历第二张牌到最后一张牌(元素个数n) ,将 j 值储存在 key 上。新建 i 变量为 j-1 ,即是 j 之前的牌里的最后一张。(假设之前的牌已排好序,那么最后一张牌的数最大)

如果 j 这张牌的 key 值比i这张牌的值大,那么他也一定比所有j前面的值大,也就不需要一个一个比较,直接插入到数组的最后。

for j =2 to A.length
    key = A[j]
    //Insert A[j] into the sorted sequence A[1..j-1]
    i = j-1


然后开始进入 while 循环与j之前的牌从右到左比大小,这个前面所有的牌即用i变量(用 i-1 遍历)表示,确定 i 的范围,为 1 <= i <= j-1,如果 j 这张牌的 key 值比 i 这张牌的值小,则将前面的值赋给后面。

如果 j 这张牌的 key 值比 i 这张牌的值大,那就停止 while 循环。所以 while 循环需要同时满足      i > 0,以及 key 比 A[i] 小,这两个条件,用 and (且)连接。

最后把 j 的 key 值赋给停在 i 的右边牌上。

while i >0 and A[i] > key
    A[i+1] = A[i]
    i = i-1
A[i+1] = key


接着进入下一个for循环中... 直至到最后一张牌。


伪代码:

for j =2 to A.length
    key = A[j]
    //Insert A[j] into the sorted sequence A[1..j-1]
    i = j-1
    while i >0 and A[i] > key
        A[i+1] = A[i]
        i = i-1
    A[i+1] = key


教材图:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值