插入排序原址排序输入的数,算法在数组A中重排这些数,
在任何时候,最多只有常数个数字存储在数组外部。
插入排序是原地排序,基本无需外部空间。
从第二个元素开始,依次遍历全部数组。
其中,前半截为已排好的有序数组而后半截为待排序的无序数组。
每个元素从后向前依次对比,直到找到自己的位置。
插入排序是稳定排序。
def insert_sort(list1):
for j in range(1, len(list1)): #从第2个元素开始遍历,依次将元素放在指定位置
key = list1[j] #记录当前值
i = j - 1 #将当前值从当前位置之前逆序依次比较
while i>=0 and list1[i]>key: #如果当前值小于之前值,则说明当前值位于之前值的前面
list1[i+1] = list1[i] #将大于当前值的元素依次后移一位,给当前值留位置
i -= 1
list1[i+1] = key #将当前值插入在第一个小于它的值的后面
return list1
if __name__ == "__main__":
list1 = [3,2,4,5,6,7]
list2 = ["wang", "zhe", "tian", "jin", "da", "xue"]
ordered_list1 = insert_sort(list1)
ordered_list2 = insert_sort(list2)
print ordered_list1 #[2, 3, 4, 5, 6, 7]
print ordered_list2 #['da', 'jin', 'tian', 'wang', 'xue', 'zhe']