直接插入排序
算法描述
直接插入排序是一种原址排序法,核心思想是:对一个元素数目为n的待排序序列list,从序列第二个元素开始,将每一个待排序元素list[i] 与从后向前与其前面的元素依次比较,直到遇到第一个比list[i] 小的元素,则将其插入该元素后面(从小到大排);算法中待插入元素之前的序列已经是有序的,即list[0:i-1]是已经排好序的。
算法实现(python)
def insertArray(arr):
for j in range(1,len(arr)):
if arr[j]<=arr[j-1]:
key=arr[j]
i=j-1
while (i>=0) & (arr[i]>key):
arr[i+1]=arr[i]
i=i-1
arr[i+1]=key
print "第",j,"次排序结果",arr
print "最终排序结果",arr
if __name__=="__main__":
arr=[1,4,2,6,5]
insertArray(arr)
时间复杂度
最好情况:序列list已经排好序了,此时每个待插入元素只需比 较一次,此时算法时间复杂度为O(n)
最坏情况:序列list是倒序的,此时算法需要比较的次数为n(n-1)/2,即时间复杂度为O(n^2)
平均情况:为O(n^2)