python排序算法实现模板

本文介绍了Python中的两种主要排序算法:快速排序和归并排序。快速排序在平均情况下拥有o(nlogn)的时间复杂度,但最坏情况下为o(n^2),空间复杂度为o(1)。归并排序则保持稳定的o(nlogn)时间复杂度,但需要额外o(n)的空间。文章提及LeetCode上的相关习题以帮助理解这些算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.快速排序

def quicksort(nums):
    def helper(first, last):
        if first < last:
            splitpoint = partition(first, last)
            helper(first, splitpoint - 1)
            helper(splitpoint + 1, last)
    def partition(first, last):
        mid = nums[first]
        left = first + 1
        right = last
        while left <= right:
            if nums[left] > mid and nums[right] < mid:
                nums[left], nums[right] = nums[right], nums[left]
            if nums[left] <= mid:
                left += 1
            if nums[right] >= mid:
                right -= 1
        nums[first], nums[right] = nums[right], nums[first]
        return right
    helper(0, len(nums) - 1)
    return nums

时间复杂度:o(nlogn),最坏o(n^2),稳定性差
空间复杂度:o(1)
快排可以根据需求通过partition选择左/右部分,而不需要对整个nums排序。(时间复杂度:o(n),最坏o(n^2))
leetcode习题:215
2.归并排序

def mergesort(nums):
    if len(nums) == 1:
        return nums
    mid = len(nums) // 2
    left = mergesort(nums[:mid])
    right = mergesort(nums[mid:])
    merge = []
    while left and right:
        if left[0] <= right[0]:
            merge.append(left.pop(0))
        else:
            merge.append(right.pop(0))
    merge.extend(right if right else left)
    return merge

时间复杂度:o(nlogn)(最好最坏都是,所以稳定性好)
空间复杂度:o(n)
感觉思路上比快排简单一点,leetcode上用到归并的题目大部分都是hard,还没有做,做完会总结
leetcode习题:215
3.堆排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值