十大排序代码实现(python)

写在前面:

参考文章:十大经典排序算法 本文的逻辑顺序基于从第一篇参考博文上借鉴过来的图,并且都是按照升序排序写的程序,程序语言采用python


冒泡排序

思路:

冒泡排序的基本思想就是让小的数逐渐‘浮上来’。也就是说:

  • 第一次冒泡:将最小的数调换到最前面;

  • 第二次冒泡:将第二小的数调换到最小的数的后面,也就是数组中的第二位;

  • 第三次冒泡,将第三小的数调换到数组中的第三位;

    ... ...

代码如下:

def bubble_sort(nums):
    # 让小的数一步一步‘浮’上来
    n = len(nums)
    for i in range(n-1):
        for j in range(i+1,n):
            if nums[i]>nums[j]:
                nums[i],nums[j] = nums[j],nums[i]
    return nums

时间复杂度: O(n^2),实际上是n-1 + n-2 + n-3 + ...,所以是平方的量级。

空间复杂度: O(l),没有借助额外空间。


快速排序

思路

快速排序的基本思路就是在一遍快排中,以基准值为基础,将比基准值小的数放到基准值的左边,比基准值大的数放在基准值的右边。然后在递归的快排基准值的左边和右边。至于基准值的取法,理论上来讲是无所谓的。

先来一个比较简单直接的吧。它的思路就是遍历一遍数组,用两个空的数组来存储比基准值大和比基准值小的数,代码如下:

def quick_sort1(nums):
    n = len(nums)
    if n ==1 or len(nums)==0:
        return nums  
    left = []
    right = []
    for i in range(1,n):
        if nums[i] <= nums[0]:
            left.append(nums[i])
        else:
            right.append(nums[i])         
    return quick_sort1(left)+[nums[0]]+quick_sort1(right)

上面的使用了额外的空间,空间复杂度比较高,下面是基于双指针的想法的代码,比较常见:

def quick_sort2(nums,left,right):
    l,r = left,right-1
    while  l < r:
        if nums[r] < nums[l]:
            nums[r], nums[l] = nums[l], nums[r]
            l += 1
            while l < r:
                if nums[l] > nums[r]:
                    nums[r],nums[l] = nums[l], nums[r]
                    r -= 1
                    break
                else:
                    l += 1
        else:
            r -= 1
    if l-left > 1:                
        quick_sort2(nums, left, l)
    if right - r > 1:
        quick_sort2(nums, l+1, right)
    return nums

简单插入排序


希尔排序


简单选择排序


堆排序


二路归并排序


多路归并排序


计数排序


桶排序


基数排序


全部评论

相关推荐

首先讲三个故事,关于牛客的事件一:2024年,牛客上有一对高学历情侣,求职方向与我当时一致,都是嵌入式方向。他们恰好是我的朋友,专业能力和学历背景都很扎实,也因此拿到了不少优质offer。和很多求职者一样,他们把offer情况整理后发在平台上,本意是记录与交流,但很快引发了争议。有声音指责他们“集邮”“不释放名额”,认为这种展示本身就是一种炫耀。最终讨论失控,当事人删除内容,事件也很快被遗忘。事件二:小红书评论区,一条评价获得了不少共鸣:“感觉牛客就是当年那群做题区毕业了开始找工作还收不住那股味,颇有一种从年级第一掉到年纪第二后抱怨考不上大学的味道”,这条评论被水印里这个同学转发到牛客后,评论...
小型域名服务器:当看到别人比自己强的时候,即便这是对方应得的,很多人会也下意识的歪曲解构对方的意图,来消解自己在这本就不存在的比较中输掉的自信,从而平白制造出很多无谓的争论。比如你会在空余时间来写优质好文,而我回家只会暗区突围,那么我就可以作为键盘侠在这里评论你是不是XXXXXXXX。即便我自己都知道这是假的,但只要这没那么容易证伪,那么当你开始回应的时候,脏水就已经泼出去了,后面可能会有更多的人带着情绪来给我点赞,而毫不关注你写的文章内容本身是啥了。
SAGIMA牛马咖啡
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2025-12-10 03:35
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务