一.插入排序
①代码
def insertSort(myList):
length=len(myList)#数组长度
for i in range(1,length):#从数组的1位置到最后,没有从0开始,默认0已经到新的数组中
j=i-1#参与排序数的前一个位置
if( myList[i]<myList[j]):#如果比前一个位置的数小
temp=myList[i]#交换位置,引入临时变量
myList[i]=myList[j] #后一个位置的数往前移到参加排序数的位置
j=j-1 #继续与下一个数比较大小,定位到下一个数
while j>=0 and myList[j]>temp: #如果前一个比temp要大,则继续往下找,直到最后
myList[j+1]=myList[j]#把j的位置的元素往右移
j=j-1
myList[j+1]=temp #直到找到比temp小,或者和temp相等的值,然后把它插入到j+1位置,此时j的位置是参加比较的数
return myList
mylist=[5,6,1,2,9,10,5,6,7,3]
print(mylist)
print(insertSort(mylist))
②时间复杂度
当数据正序时,执行效率最好,每次插入都不用移动前面的元素,时间复杂度为O(N)。
当数据反序时,执行效率最差,每次插入都要前面的元素后移,时间复杂度为O(N2)。
所以,数据越接近正序,直接插入排序的算法性能越好。
③空间复杂度
由直接插入排序算法可知,我们在排序过程中,需要一个临时变量存储要插入的值,所以空间复杂度为 1 。
④稳定性
直接插入排序的过程中,不需要改变相等数值元素的位置,所以它是稳定的算法。