前言
插入排序应该是最容易想到的排序算法,其核心思想是:将待排序的序列看成两部分,以某一个元素为界,左边的是排好序的序列,右边是待排序的序列,每次读取边界上的一个元素,然后将它跟排序好的序列中的元素一个一个对比,然后排好序的元素依次挪出个空位,然后将这个元素插入到合适的位置,一直循环到序列结束。
插入排序很常见,比如:玩扑克牌时,抓牌的过程就是一个插入排序,每抓到一张牌,就将这张牌插入到手里排好序的牌中。怎么个插入法儿呢?比如你手里的牌是3、6、9,现在你抓到了一张8,你会先跟3比较,8比3大,把3往后挪一个位儿;再跟6比,8比6大,6也往后挪一个位儿;再跟9比,8比9小,9就不挪了,然后就把8放在挪出的空位上来。循环这个过程,手里的牌就是有序的。同样的例子还有按身高站队,也是一个一个比,然后一个一个挪位子,循环这个过程。
正文
下面的代码是python语言实现的插入排序算法
a=[234,2345,6,543,2346,34,6,2,56,146,776]
print(a)
for i in range(1,len(a)):
j = i-1
tmp = a[i]
while j>=0 and a[j]>tmp:
a[j + 1] = a[j]
j-=1
a[j+1] = tmp
print(a)
总结
插入排序的时间复杂度是:O(n^2)
插入排序的空间复杂度是:O(n)
插入排序的好坏极大地依赖于序列原始状态,如果起始无序,则效率很低。不适合大规模数据集的排序问题。