标签:算法
看了那么多插入排序,解释一下这个方法。
分如下几个步骤:
1 认为前面的数列已经完成排序,即按照从小到大的顺序,最大的在最后面
2 将接下来要排列的数a[i]存入一个变量中,a[i] = data。即在 i 这个位置挖了一个坑。
3 从已经排序的数组a[j]的末尾开始,即从最大值a[j] 开始,data不太老实,想通过 j 遍历排列好的部分,找到比自己大的数,然后让他们依次填坑。如果data大,则循环结束,data乖乖回到原来的坑;如果data小,则a[j]往后移动一位填那个坑,然后再空出自己的位置成为新的坑:a[j+1] = a[j]。每轮比较 j-- ,直到 j < 0,或者data回到坑中。
4 循环结束后a[j] 的值是小于新来的值的,则a[j+1]的位置上的值就是新来的值data了:a[j+1] = data。
整个的代码如下:
def Insert_sort(a): for i in range(1,len(a)): data = a[i] #先挖一个坑 j = i - 1 while j >= 0 and a[j] > data: #data看是不是比自己大 a[j+1] = a[j] #是的话,就让那个值往后填坑, a[j+1]永远是data挖的坑 j = j-1 #接着下一个 a[j+1] = data #比较结束了,data回到自己刚挖的坑中 return a
标签:算法
原文地址:http://rhythmer.blog.51cto.com/4110192/1600411