实质:交换排序的一种,因为比冒泡排序相比交换的跨度要大的多,所以效率会比较高。
基本思想:把一个数组分割成独立两部分,A部分所有值均比B部分所有值要小,然后两部分内再分割并递归。
具体实现:
第一步,在数组A中选取一个关键字,称之为枢轴(pivot),作用就是以这个枢轴为基准,把数组分为两部分,枢轴左边的值全部比枢轴的值小,右边比其小.一般选取数组中的第一个元素当作这个数组的枢轴
第二步,设置两个变量i、j,排序开始的时候:i=0,j=n-1;(n待排序的部分的元素个数)
第三步,从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于枢轴的值A[j],将A[j]和A[i]互换;(这里需要注意的是,交换完成之后直接跳到第四步,不会再去寻找第二个比枢轴的值小的元素,同时,要记住j的值是发生变化的).
第四步,从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于枢轴的A[i],将A[i]和A[j]互换;
第五步,重复第三、四步,直到i=j; (三,四步中,没找到符合条件的值,即三中A[j]不小于枢轴的值,4中A[i]不大于枢轴的值的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。