算法学习-1

插入排序是学习算法时最先学到的一个算法,很简单,也许看一遍就会理解,从而觉得自己掌握这个基本的算法。但是很多人可能会像我一样,过了一段时间,提笔来写一下插入排序的伪代码,就很难写出书本上如此优雅的伪代码。

INSERTION_SORT(A):
    For j=2 to A.length
        key=A[j]
        //insert A[j] to 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

所以懂跟掌握真是两回事,要能随时随手写出这几行代码,首先要掌握设计这段代码的思想,其次要有清晰的逻辑,我相信伪代码写得漂亮的人,一定是编程高手。

插入排序的核心思想是代码中注释,把A[j]插入到已排序的A[1,..,j-1]中后,并保证插入后的A[1,..,j]仍然是排好序的,把这个过程从2循环到n,显然当j为2时A[1,..,j-1]等于A[1]满足已排好序这个性质,所以当j迭代为n时,将A[n]插入到A[1,..,n-1]后A[1,..,n]就排好序了。书面上把A[1,..,j-1]的这些特性形式地叫循环不变式。

用循环不变式逻辑很清晰的表明了算法的正确性

最后是如何简洁的把一个值如何正确的插入到已排序的数组中:
在将A[j]插入到A[1,..,j-1]中时,用一个循环变量i从j-1往前循环查找比A[j]大的值都往后移一位,当遇到比key小的时候终止,并把key插入到循环变量后面的位置(i+1)上。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值