|
好的,鱼油!快速排序是一种高效的排序算法,采用分治策略。原理是选一个基准值,将数组分为小于基准和大于基准的两部分,再递归排序子数组。下面是用Python实现的代码和解释:
- def quick_sort(arr):
- 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)
- # 测试示例
- if __name__ == "__main__":
- my_list = [3, 6, 8, 10, 1, 2, 1]
- sorted_list = quick_sort(my_list)
- print("排序前:", my_list)
- print("排序后:", sorted_list)
复制代码
代码解释:
1. if len(arr) <= 1:递归终止条件,无需排序直接返回
2. pivot = arr[len(arr)//2]:选择中间位置元素作为基准值(避免极端情况)
3. 列表推导式拆分数组:
- left:所有小于基准值的元素
- middle:等于基准值的元素(确保重复值正确排序)
- right:所有大于基准值的元素
4. 递归合并:quick_sort(left) + middle + quick_sort(right)
时间复杂度:
- 平均情况:O(n log n)
- 最坏情况(已排序数组):O(n^2)(可通过随机选择基准值优化)
测试输出:
排序前: [3, 6, 8, 10, 1, 2, 1]
排序后: [1, 1, 2, 3, 6, 8, 10]
注意:这是简洁版实现(创建新列表),实际优化可在原数组上操作(原地排序)节省空间。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|