插入排序思想:假设要在一串无序的数据中进行从小到大排序,则第一个数不动,从第2个数开始起作为要插入的数,将要插入的数与前面所有数比较,找到插入位置。
代码:
'''插入排序思想:在一串无序的数据中,第一个数不动,将第2个数作为要插入的数(插入数要保存), 将第2个数与第1个数比较若小于则把第1个数放在第2个数的位置,第2个数插入到第一个数的位置中; 接着插入第3个位置的数,先将第3个数与第2个数比较,若小于则将第2个数放在第3个数的位置, 在将保存好的第3个数与第一个数比较,若小于将第一个数放在第2个数的位置,将要插入的第3个数放在第一个数位置, 若大于将要插入的第三个数放在第2个数位置即插入位置,以此类推''' def insert_sort(list): for i in range(1,len(list)): insert_value_position=i #插入数的位置 insert_value=list[i] #把要插入的数保存 #下标大于0表示在0之后都是可以参与比较的数,只要插入值小于前面值,就将大值后移,找到插入位置。 while insert_value_position>0 and insert_value<list[insert_value_position-1]: list[insert_value_position]=list[insert_value_position-1] insert_value_position-=1 list[insert_value_position]=insert_value if __name__=='__main__': list=[] for i in range(15): list.append(random.randrange(1000)) print(list) start_time=time.time() insert_sort(list) end_time=time.time() print(list) print("Cost time:",end_time,start_time)
代码中的思想写的比较凌乱,后续会进行修改。
时间复杂度:最大为o(n^2) 因为在while循环中不确定要比较的次数,最大次数就为每一个前面的数都需要进行比较。但是插入排序效率要高于冒泡和选择排序