今天介绍另一种大名鼎鼎的排序算法——快速排序。见名知意,这个算法排序速度一定相当快。接下来逐步分析分析。
首先了解快速排序的基本思路:
1.选的中间轴Pivot
2.将大于Pivot的数据放在Pivot右边
3.将小于Pivot的数据放在Pivot左边
4.分别对左右子序列重复上述三步操作
具体过程就是:定义两个指针,left,right.分别指向数组的头和尾,一般而言,我们选择头也就是arr[0]作为我们选定的中间轴Pivot。然后从right开始遍历直到找到小于Pivot的元素,将这个元素的值赋给left指向的元素及arr[left] = arr[right]。接着开始遍历left指针,直到找到大于Pivot的元素,然后将arr[right] = arr[left],最终left,right会指向同一个元素,这个元素就是中间轴Pivot的插入位置。
听起来是不是很简单?惯例,还是给出详细推导步骤,如图:
然后开始遍历left指针,如图:
(每次遍历都会找到小于(right移动)或者大于(left移动)Pivot的元素,不然就会一直遍历直到left >= right,如上图left遍历到a[1]发现大于Pivot所以需要进行赋值arr[right] == arr[left],接下来类似过程不再讲述)
然后重复上述的步骤,left,right交替遍历。直到left,right指向同一个元素。接下来给出变换的过程,但不一一概述了。