1. 数组排序的常见场景与核心痛点
在实际编程练习和算法题中,数组排序是最基础也最频繁出现的操作之一。我遇到过太多这样的场景:明明题目逻辑已经理清,却因为排序环节没处理好导致整个解法效率低下。比如最近做的一道合并区间题目,先用标准库排序就能轻松解决,但如果自己手写冒泡排序,直接就会超时。
排序之所以成为高频考点,是因为它既是基础算法的试金石(考察对时间复杂度的理解),又是实际问题的前置步骤(如二分查找必须先排序)。根据我的刷题统计,力扣题库中超过30%的中等难度题目都需要先对数组进行某种形式的排序操作。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 五大经典排序算法实现与优化
2.1 快速排序的工程实践
快速排序虽然平均时间复杂度是O(nlogn),但在实际实现时有很多魔鬼细节。这是我的优化版本:
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)
关键技巧:三路划分处理重复元素。当数组中有大量重复元素时,传统快排会退化成O(n²),这种写法能保持稳定效率。
2.2 归并排序的特殊价值
在需要稳定排序(保持相等元素相对位置)的场景,比如"计算右侧小于当前元素的个数"这类题目,归并排序是首选。这是我常用的带计数功能的变种:
python复制def merge_sort(nums):
if len(nums) <= 1:
return nums
mid = len(nums) // 2
left = merge_sort(nums[:mid])
right = merge_sort(nums[mid:])
return merge(left, right)
