美文网首页算法
算法入门——插入排序、快速排序

算法入门——插入排序、快速排序

作者: 白巧克力LIN | 来源:发表于2022-08-20 00:53 被阅读0次

    上篇文章学习了算法入门——冒泡排序、选择排序,这篇文章我们学习算法入门——插入排序。

    插入排序

    插入排序是在一组列表中,假设列表只有该列表的第一个元素,再与该列表的第二个元素作对比,当第二个元素比第一个元素小时,则第二个元素插入到第一个元素前面,再与该列表的第三个元素作对比,当第三个元素比第二个元素小,但比第一个元素大时,则第三个元素放在第一个元素后面,第二个元素移动到第三个元素的位置。

    插入排序类似我们的打扑克牌,其基本原理如下:


    插入排序的代码关键是如何实现插入位置后面的元素进行后移。

    示例代码如下:

    li = [4, 2, 5, 3, 1]
    def insert_sort(li):
        for i in range(1, len(li)):
            tmp = li[i]             # 列表第i个元素
            j = i - 1               # 列表第i-1个元素
            while 0 <= j and tmp < li[j]:  # 当前面的元素大于后面的元素时
                li[j + 1] = li[j]   # 将比tmp大的元素后移一位
                j -= 1              # 对更前面的元素作对比
            li[j + 1] = tmp         # 将tmp元素插入到小的后面
            print(li)
    insert_sort(li)
    

    运行结果如下:


    插入排序的时间复杂度为:O(n²)

    快速排序

    快速排序是取某个元素(通常是第一个元素)出来后,先从右边开始比较,比该元素小就放在空位上,再从左边开始比较,比该元素大就放在空位上,直到把取出来的元素放在空位上,这时就把取出来的值作为界限分为左右两侧,再把左右两侧按照刚才的操作执行。

    示例代码如下:

    def partition(li, left, right):
        tmp = li[left]  # 取第一个元素
        while left < right:
            while left<right and li[right] >= tmp:  # 从右侧的元素大于等于tmp元素
                right -= 1  # 对比右侧前一个元素
            li[left] = li[right]            # 将右边的值写到左边空位上
            print(li)
            while left<right and li[left] <= tmp:  # 从左侧的元素小于等于tmp元素
                left += 1   # 对比左侧后一个元素
            li[right] = li[left]            # 将左边的值写到右边空位上
            print(li)
        li[left] = tmp                  # 将取出来的元素放在空位上
        return left
    li=[5,7,3,6,2,4,8]
    partition(li,0,len(li)-1)
    print(li)
    

    运行结果如下所示:

    可以看到来列表以5为界限分了左右侧,接下来左右侧执行刚才的操作即可完成排序,示例代码如下:

    def quick_sort(li,left,right):
        if left<right:
            mid=partition(li,left,right)        # 获取取出来的元素后的存放位置
            quick_sort(li,left,mid-1)           # 左侧
            quick_sort(li,mid+1,right)          # 右侧
    li=[5,7,3,6,2,4,8]
    quick_sort(li,0,len(li)-1)
    print(li)
    

    运行结果如下:


    快速排序的时间复杂度为:O(nlogn)

    好了,算法入门——插入排序、快速排序就学到这里了,下篇文章学习算法入门的其他知识。

    公众号:白巧克力LIN

    该公众号发布Python、数据库、Linux、Flask、自动化测试、Git、算法等相关文章!

    相关文章

      网友评论

        本文标题:算法入门——插入排序、快速排序

        本文链接:https://www.haomeiwen.com/subject/anjpgrtx.html