取待排序列中的第一个元素(可以任意),使得它左边的元素都比他小,右边的元素都比他大,称这个元素枢轴。再对左右序列进行递归操作,使得整个序列成为一个有序序列。
算法细节:以升序为例,头尾两个指针(索引),头指针指向第一个元素(枢轴),尾指针指向最后元素的后一位。尾指针从右到左寻找第一个小于等于枢轴的元素,头指针从左到右寻找第一个大于等于枢轴的元素。然后交换头指针和尾指针指向的元素,从而使得大的在后面小的在前面。(都是先移动再比较,避免了交换元素等于枢轴时发生的卡住的情况)
最后将枢轴与尾指针交换(因为最后头指针≥尾指针),然后再递归。注意:上述的头指针是没有检查(处理)第一个元素(枢轴)的,因此需要这步操作。