插入排序相对比较简单,它是原址排序,平均时间复杂度为O(n2),最优时间复杂度为O(n),当数组是正序时达到最优的情况。逆序的时候,时间复杂度最坏,为O(n2)。
思路:插入排序的基本想法就是把数组分为2部分,前一部分是排好序的,后面是待排序的。每一次从待排序的数组中拿出一个数,如果这个数大于已经排好序的数组的最后一个数,那么这个数就插入到排好序的数组的末尾,如果这个数小于排好序的数组的最后一数,它与最后一个数交换,继续与前一个数比较,直到找到合适的位置结束。
def insert_sort(alist):
for i in range(1, len(alist)):
if alist[i] < alist[i-1]:
alist[i], alist[i-1] = alist[i-1], alist[i]
j = i-1
while j > 0:
if alist[j] < alist[j-1]:
alist[j], alist[j-1] = alist[j-1],alist[j]
j -= 1