十大排序代码实现(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

简单插入排序


希尔排序


简单选择排序


堆排序


二路归并排序


多路归并排序


计数排序


桶排序


基数排序


全部评论

相关推荐

程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
准备进厂的共享单车:你最好现在就开始投吧 投一些中厂左右的公司 因为快寒假实习了 普遍比较好找一点 年后尤其快暑假的前一两个月竞争最激烈,现在投慢慢练面试经验 如果没过就慢慢沉淀 过了也看自身情况直接去实习呗 (有offer也可以不去啊) 有机会的话最好还是直接把握了,一定要等到年后实习吗 找个好实习寒假过年那几天又不是不能回家过年 难道你寒假有其他打算吗
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

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