【ChatCode 001】数组快排

文章介绍了如何使用Python实现快速排序算法来解决LeetCode的第912题。代码通过递归,选取数组中间元素作为基准,将数组分为小于、等于和大于基准的三部分,并对左右两部分递归排序,最后合并结果。这种方法在平均情况下有O(nlogn)的时间复杂度,但最坏情况可达到O(n^2),需注意基准元素的选择。

LeetCode 912

https://leetcode.cn/problems/sort-an-array/

快排解法

def quick_sort(arr):
    """
    快速排序函数,使用递归实现
    :param arr: 需要排序的数组
    :return: 排序后的数组
    """
    # 结束递归条件,当数组长度小于等于1时返回数组本身
    if len(arr) <= 1:
        return arr
    # 选取数组中间元素作为基准元素
    pivot = arr[len(arr) // 2]
    # 列表推导式,存储小于基准元素的元素
    left = [x for x in arr if x < pivot]
    # 列表推导式,存储等于基准元素的元素
    middle = [x for x in arr if x == pivot]
    # 列表推导式,存储大于基准元素的元素
    right = [x for x in arr if x > pivot]
    # 递归地对左右两边的子数组进行排序
    return quick_sort(left) + middle + quick_sort(right)

print(quick_sort([3,6,8,10,1,2,1]))

该代码实现了快速排序算法,使用递归来实现。主要包含三个部分:

  • 一个判断语句,当数组长度小于等于1时返回数组本身,结束递归。
  • 一个变量pivot,表示基准元素,这里采用数组中间元素作为基准元素。
  • 三个列表,left, middle, right分别存储小于基准元素,等于基准元素,大于基准元素的元素。

在最后一行,递归地对left和right两个列表进行排序,最后将排序好的left和middle和right合并起来。

这种实现方式,每次选取中间元素作为基准元素,时间复杂度为O(nlogn),适用于随机数组。但是,如果数组本身就是有序的或者逆序的,时间复杂度就会变为O(n^2),因此我们需要在实际应用中,选择一个合适的基准元素,或者使用随机化算法来避免最坏情况的出现。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值