算法学习-1

来源:互联网 发布:文档加密软件下载 编辑:程序博客网 时间:2024/05/22 01:50

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

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
原创粉丝点击