插入排序

插入排序

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

下图展示了插入排序过程, 阴影项表示算法进行每次遍历时的有序子列表:

详细展示插入31的过程:

插入排序实现

def insertionSort(alist):
    #index本质上是指示出了当前列表中元素的个数
    for index in range(1,len(alist)):
        #记录下要插入的值
        currentvalue = alist[index]
        #从最后一个位置开始
        position = index

        #依次从后向前将以排序列表中的元素与要插入的值进行比较,直到列表为空,或者当前元素大于列表中的某个元素
        #这个过程还包含了列表元素向后移动的操作
        while position > 0 and alist[position -1] > currentvalue:
            alist[position] = alist[position -1]
            position = position - 1
        alist[position] = currentvalue

测试:

alist = [54,26,93,17,77,31,44,55,20]
insertionSort(alist)
print(alist)

参考:

  1. 演示动画
posted @ 2019-01-05 14:48  youngliu91  阅读(201)  评论(0)    收藏  举报