__author__ = 'steven'
# coding=utf-8
'''插入排序(Insertion Sort)
它的工作原理是通过构建有序序列,对于未排序数据,
在已排序序列中从后向前扫描,找到相应位置并插入。
步骤:
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置,并做插入到该位置后
5.重复步骤2~4
平均时间复杂度为 O(n^2),该算法稳定.
注:对于基本有序的数组,使用直接插入排序的效率是很高的.
'''
list = [5, 8, 1, 4, 2, 7, 3, 6]
# list_ascended = [1, 2, 3, 4]
# list_descended = [5, 4, 3, 2]
def insert_sort(list):
n = len(list)
for i in range(1, n):
print(list)
for j in range(i, 0, -1): # 以i为起点,0为终点,向前遍历
if list[j] < list[j - 1]:
list[j], list[j - 1] = list[j - 1], list[j]
else:
break
return list
print(insert_sort(list))
# print('-----')
# print(insert_sort(list_ascended))
# print('-----')
# print(insert_sort(list_descended))