排序算法:插入排序(python写法)

插入排序:

        类似于打扑克牌时我们抽牌,每抽到一张牌,就将这张牌插入到手牌指定位置。
        有序区 无序区。
        有序区就是已经排好序的区域(你手里已经有的牌)。
        无序区就是没有排序的区域(牌堆)
        每次抽到牌之后,对有序区进行一次类似冒泡的处理,从右向左进行冒泡,直到牌插入到了正确位置。
        时间复杂度:O(n^2)
        空间复杂度:O(1)
    重点:理解有序区和无序区的概念,以及:1个元素自身是有序的。

算法的两个基础概念:O(n)
        空间复杂度:所使用的算法占用的内存空间。O(1):没有新开辟的内存空间。O(n):新开一个长度为n的列表或者是其他的数据结构。
        时间复杂度:所使用的算法消耗的时间的长度。O(n):对一个长度为n列表进行一次完全的遍历。O(n^2):对一个列表进行嵌套的两次循环。

插入排序(python代码):

import random

li1 = [random.randint(0, 9) for i in range(10)]

def insert_sort(li):

    for i in range(1,len(li)) :

        while li[i] < li[i-1] and i>0 :

            li[i-1],li[i] = li[i],li[i-1]

            i -= 1

    return li

print(li1)

print(insert_sort(li1))

插入排序注释:

def insert_sort(li):#插入排序

    for i in range(1,len(li)):#li[0]只有一个元素,所以他一定是有序的,所以我们从第二个元素开始循环

         k=i#初始化一个需要排序的元素的指针。

         j=i-1#初始化一个指向有序区最后一个元素的指针。

         while li[k]<li[j] and j>=0:#如果我们取出来的数比前面的数字小,则双方交换位置,继续循环。j>=0防止数组越界

             li[k],li[j]=li[j],li[k]#交换两个相邻元素。

             k-=1

             j-=1#把kj通通向左挪一位。  

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值