快速排序算法的原理:
在一个长度不小于3的序列A[0..n-1]中,对于任何 0 < n < n-1,以每一个元素p = A[n]为界,都可以将序列分隔为前、后两个子序列 A1 = A[0..n]和 A2 = A[n..n-1],则称p为序列A的轴点。然后对两个子序列排序,当子序列排序完成即可得到整个序列的排序结果(又称为 分治法)。
轴点的要点为:若一个元素是轴点,则经过排序之后,它的位置不应发生变化。
但是,实际应用中,序列中可能不存在这样一个轴点。所以需要选取轴点。
一般轴点的选取都选择数组的第一项或最后一项,但是最高效的方式是随机选取轴点.
下面的代码将采用固定轴点的方式演示快速排序.
1 | require 'pry' |
排序过程
1 | [23, 13, 51, 76, 81, 26, 57, 69, 66] |