视频字幕
欢迎来到算法实验室!今天我们一起拆解快速排序。面对这样一堆无序数字,我们怎样让电脑在几毫秒之内排好顺序?答案就是快速排序。快速排序是最常用的O(n log n)排序算法之一,以其高效性和实用性著称。
快速排序的核心是分而治之。首先选择一个分界点,然后把数据切成小于等于分界点和大于分界点的两块,最后对这两块再分别进行排序。这种递归的分治思想让复杂的排序问题变得简单高效。
快速排序包含三个核心步骤。首先选择分界点,我们选择中间元素2作为分界点。然后调整区间,将小于等于2的元素放在左边,大于2的元素放在右边。最后递归处理左右两个子数组,重复这个过程直到数组完全有序。
最直观的实现方式是创建两个辅助数组a和b。遍历原数组,将小于等于分界点的元素放入数组a,大于分界点的元素放入数组b。最后将两个数组合并回原数组。这种方法思路清晰易懂,但缺点也很明显:需要额外的O(n)空间,内存使用量翻倍。
高效的原地分区算法使用双指针技术。左指针i从左向右扫描,寻找大于等于分界点的元素。右指针j从右向左扫描,寻找小于等于分界点的元素。找到后交换这两个元素的位置。重复这个过程直到两个指针相遇。全程不需要开辟新数组,空间复杂度仅为O(1)。