插入排序:

        类似于打扑克牌时我们抽牌,每抽到一张牌,就将这张牌插入到手牌指定位置。
        有序区 无序区。
        有序区就是已经排好序的区域(你手里已经有的牌)。
        无序区就是没有排序的区域(牌堆)
        每次抽到牌之后,对有序区进行一次类似冒泡的处理,从右向左进行冒泡,直到牌插入到了正确位置。
        时间复杂度: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通通向左挪一位。  

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐