如何在Python中快速排序一个列表?
发布时间:2023-06-13 04:55:47
快速排序是一种常见的排序算法,主要思想是通过分治的思路将原问题化解成若干个小问题,然后递归求解每个小问题,并将排序后的结果合并起来,最终得到整个问题的解。快速排序是一种比较高效的排序算法,时间复杂度为$O(nlogn)$。
Python中使用快速排序可以使用内置函数sorted(),也可以自己编写代码实现。下面介绍两种方法:
方法一:内置函数sorted()
Python中有一个内置的sorted()函数,它可以接收一个列表作为参数,返回一个排序后的新列表。sorted()函数的默认排序顺序是升序,但也可以通过参数reverse来控制排序顺序。
例子:
a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] b = sorted(a) print(b) # 输出[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] c = sorted(a,reverse=True) print(c) # 输出[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
方法二:手写快速排序法
手写快速排序法主要思路是:选择一个枢轴(pivot)元素,将小于它的元素放在一个列表中,大于它的元素放在另一个列表中,然后递归地对这两个列表进行排序,最后将它们合并起来。以下是代码实现:
def quick_sort(nums):
if len(nums) <= 1:
return nums
else:
pivot = nums[0]
less = [i for i in nums[1:] if i < pivot]
greater = [i for i in nums[1:] if i >= pivot]
return quick_sort(less) + [pivot] + quick_sort(greater)
用例子来说明一下这个算法的执行过程:
当输入列表[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]时,我们选择 个元素3作为枢轴,将它作为基准值,把列表中小于3的元素放到一个列表中,大于等于3的元素放到另一个列表中,此时得到两个子列表[1,1,2]和[4,5,9,6,5,5],再对这两个子列表进行递归排序,最终得到排序后的完整列表[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]。
总结
Python中实现快速排序的方法主要有两种,一种是使用内置函数sorted(),另一种是手写代码实现。我们可以根据实际需求选择不同的方法。如果数据量很小,直接调用sorted()即可;如果数据量较大,则需要考虑手写快速排序法,以获得更好的性能。
