思路
在给定的一个序列中选取第一个元素(也可以是其他的,一般情况都取第一个元素),作为基准元素。把小于基准元素的元素都放在基准元素的左边,把大于基准元素的元素都放在基准元素的右边。依此类推,直至无法分割。
示例代码
def my_sort(nums):
"""
快速排序实现
:param nums: 一个包含数值的list
:return: 新的排序后的list
"""
if len(nums) <= 1:
return nums
base_element = nums[0]
left = [x for x in nums[1:] if x <= base_element]
right = [x for x in nums[1:] if x > base_element]
return my_sort(left) + [base_element] + my_sort(right)
if __name__ == "__main__":
nums = [1, 4, 5, 9, 7, 8, 2, 3]
result = my_sort(nums)
print(result)
个人觉得这是一种很pythonic的实现方式,充分使用了递归和列表生成式。
先选取第一个元素作为基准元素(base_element),然后使用列表生成式将小于基准元素的元素都放入left列表,然后把大于基准元素的元素都放入right列表。
注意,遍历nums列表时要从第二个元素开始,因为如果从第一个元素开始将会陷入无限循环,最终导致引发RecursionError,因为我们已经将第一个元素作为基准元素了,需要跨过它,否则无法满足退出条件:left <= 1
网友评论