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),因此我们需要在实际应用中,选择一个合适的基准元素,或者使用随机化算法来避免最坏情况的出现。
4513



被折叠的 条评论
为什么被折叠?



