一、快速排序算法简介
1.1 什么是快速排序算法
快速排序(Quicksort),又叫分区交换排序(partition-exchange sort),简称快排,一种排序算法,最早由Charles Antony Richard Hoare提出。在平均状况下,排序n个项目要O(nlogn)次比较,最坏情况下是O(n^2)次比较,但这种情况不多见。事实上,快排的效率通常比其他排序算法要快,因为它的内部循环(inner loop)可以在大部分的架构上有很高的效率。—— 维基百科
1.2 快排主要过程
快排的全过程就是一次次的基本排序组合起来的,每次基本排序后可以确定一个元素的准确位置(该元素左边的数都比他小,右边的数不小于该元素)。所以快排的思想是分治法,把大规模问题分解,再逐一解决。
选中的这个数称为基准(pivot),一般选择数组第一个数或者中间位置的。以上图为例,经过一次基本排序后,比8小的数放在了左边,不小于8的数放在了右边。这样我们就确定了元素8的位置一定是对的,这也是一次基本排序的成果。之后左右两边继续递归基本排序,直至整个数组有序,算法结束。
二、快速排序实现方法
经过以上分析,不难得出,快速排序的核心在于如何实现一次基本排序,事实上,有很多种不同的方法,这也带来了不同的空间复杂度。比较经典的做法是利用左右两个指针进行元素的交换,这也是为什么快速排序又叫分区交换排序。今天,我们带来另一种比较简单暴力的方法,可以快速实现一趟快速排序。
- 首先确定基准数,我们这里选择数组中间的数,并把他取出来。(这时候已经将8从数组中删掉,下图为了理解方便,用黑色标注出来)
基准的选择很大程度上影响着算法的效率&#x