# -*-coding:utf-8
def InsertSort(list):
# list = [4,1,9,13,34,26,10,7,4]
m = len(list) # 元素个数
for i in range(m): # 对每一个元素
min = i # 当前元素索引
for j in range(i+1,m): # 遍历后面的所有元素,寻找最小的值
if list[min] > list[j]: # 如果后面出现比当前值小的元素
min = j #
# 当前元素与在其后面的最小元素交换位置
print "----------------------"
print "比较元素: ",list[i]
print "交换元素: ",list[min]
tmp = list[i]
list[i] = list[min]
list[min] = tmp
print list
return list
if __name__== '__main__':
list_0 = [4,1,9,13,34,26,10,7,4]
list_1 = InsertSort(list_0)
print list_1
算法性能:
1. 待排序的元素个数是n,该算法执行n-1次插入,每次只需一个辅助空间作为元素交换使用;
2. 最好的情况:排序前记录已经按关键码大小有序排列,每趟只需与前面的有序对象序列的最后一个关键码比较一次,无需移动,总的比较次数n-1;
3. 最坏的情况:第i趟时与前面i-1个关键字比较,并且前面i-1个关键字共移动i-1次,加上第i个关键字复制到辅助交换空间,再从辅助空间到有序表的2次移动,一共是i+1;
4. 算法的时间复杂度是O(n**2),空间复杂度是O(1)。