一行代码实现快速排序
文章目录
- 前言
- 快排思想
- 代码
- 代码解释
- 最后
前言
大家好,我是醉墨居士,最近想用尽可能少的代码行数实现快速排序,并且不导入Python的包来实现,最后优化了一下,只用一行代码就实现了快速排序,感觉很具备学习价值,可以让初学者快速学习快速排序的思想与实现
快排思想
假设我们采用升序排序
我们在待排序的数组中找到一个基准值,然后对该数组进行分区,将数组中小于基准值的数都放到基准值位置的左边,将数组中大于基准值的数都放到基准值位置的右边,然后对左区间小于基准值的部分进行快速排序递归将该部分调整为有序,然后对右区间大于基准值的部分进行快速排序递归将该部分调整为有序
执行完以上步骤,最终我们的数组就按照升序进行排列了
代码
def quick_sort(nums): return nums if len(nums) < 2 else quick_sort([x for x in nums[1:] if x < nums[0]]) + [x for x in nums if x == nums[0]] + quick_sort([x for x in nums[1:] if x > nums[0]])
代码解释
首先定义了一个quick_sort函数,
然后判断待排序的列表的长度
- 如果小于2,则表示不需要进行排序直接返回该列表
- 如果不小于2,则选取列表中的0号索引位置的元素作为基准值,然后通过列表推导式计算小于基准值的列表进行快速排序递归将该区间排序,计算所有等于基准值的元素的列表,计算大于基准值的列表进行快速排序递归将该区间排序,然后拼接三份区间列表,即为最终有序的列表
最后
我是醉墨居士,关注我,学习算法不迷路,用最简单的思路讲解传授算法
大道至简、返璞归真、重剑无锋我最喜欢的几个成语,简化复杂的问题,不止算法,生活也是一样,我们需要做一些减法,极简是一种学习方法、生活哲学、解决问题的策略!