排序算法

来源:互联网 发布:js精粹 编辑:程序博客网 时间:2024/05/29 09:03

一.插入排序

①代码

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 

④稳定性

 直接插入排序的过程中,不需要改变相等数值元素的位置,所以它是稳定的算法。