问题

对一组元素按照从小到大重新排序

例如:
27, 33, 28, 4, 2, 26, 13, 35, 8, 14
排序后:
2, 4, 8, 13, 14, 26, 27, 28, 33, 35

插入排序算法:

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

Python代码示例

# 升序
def insert_sort(alist):
    n=len(alist)
    # 默认第一个元素已经被排序
    if n == 1:
        return alist
    # 从下一个元素开始
    for i in range(1, n):
        for j in range(i, 0,-1):
            # 依次从后循环已排序的元素与取出的元素对比
            if alist[j] < alist[j-1]:
                # 交换
                alist[j],alist[j-1]=alist[j-1],alist[j]
    return alist



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

注意

如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找插入排序。

posted on 2017-10-23 00:22  玩蛇的  阅读(235)  评论(0编辑  收藏  举报