排序算法

本文详细介绍了插入排序算法的实现原理及代码实现过程,并分析了其时间复杂度、空间复杂度及稳定性特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.插入排序

①代码

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 

④稳定性

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值