刚开始学习插入算法排序的时候我看完算法导论中的简略介绍之后———即类似于打扑克时将刚抓取到牌正确插入到手中已有的扑克中,好看完介绍之后我就直接开干,不就是将抓取到的扑克与手中已有的扑克逐一比较然后排到正确的位置,不到一分钟我就写出了自己所谓的插入排序代码(python)
def insertsort(listsort): for i in range(len(listsort)): for j in range(0,i+1): if listsort[i]<=listsort[j]: listsort[i],listsort[j]=listsort[j],listsort[i] return listsort
但是我刚写完就感觉有点奇怪,这怎么感觉我写出了一个不伦不类的冒牌排序,然后我看了一下书上给出的插入排序伪代码接着我改为了python代码如下,看完之后我才发现自己的错误所在
def insrtcort(listsort): for i in range(1,len(listsort)): key=listsort[i] j=i-1 while j>=0 and listsort[j]>key: listsort[j+1]=listsort[j] j=j-1 listsort[j+1]=key return listsort
可能到此大家已经明白插入算法的处理过程了,其实它跟我第一次的代码还是有一定的相同点,他们都是将一数据将前面或后面的数据进行逐一比较,但是发现满足条件后各自处理的方式是不一样的,我第一次是将两个数据进行交换,而插入排序是将已排好的数据往后进行移动。可能这么说大家还是有一点不明白,下面我将通过实例来为大家讲解。如有一个列表是[8,9,3,5,6,7],假设进行从小到大排列,第一次发现满足排序条件的是9和3,即9大于3,需要进行数据处理,我第一次的代码的处理是将9和3 进行交换 结果第一次处理后列表变为[3,9,8,5,6,7],再经下次处理结果变为[3,8,9,5,6,7].而插入排序的操作是将9往下移动一位然后整个列表变为[8,9,9,5,6,7],可能这里大家就会有点不明白了,你这不是用9把数据3给覆盖了吗,为什么说是把9往下移动一位呢,不急我们且看下步操作,因为8也大于3,所以又要进行一次数据处理,结果列表变为[8,8,9,5,6,7],最后由于比较条件不满足,所以将8用数据3覆盖,最后整体的一个效果就是8和9整体向后移动一位再将3插入,所以所谓插入排序是一个整体的效果,并不是一个步骤的结果。至此已讲解完毕。
当然以上所述均为自己看法,若有不当敬请指教