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),因此我们需要在实际应用中,选择一个合适的基准元素,或者使用随机化算法来避免最坏情况的出现。
文章介绍了如何使用Python实现快速排序算法来解决LeetCode的第912题。代码通过递归,选取数组中间元素作为基准,将数组分为小于、等于和大于基准的三部分,并对左右两部分递归排序,最后合并结果。这种方法在平均情况下有O(nlogn)的时间复杂度,但最坏情况可达到O(n^2),需注意基准元素的选择。
5665





