一、原理
快速排序分2部分,partition和sort
1、partition
这个过程先从待排序数组source(int[] source)中取出一个元素做key,然后根据key,将数组分为两部分,key左边的比key小,key右边的不比key小(或者左边小于等于key,右边大于key)。
1)选取key
这个一般选取数组最后一个元素,或者随机选择,然后和数组最后一个元素进行交换,最终的目的是让数组最后一个元素成为key,至于为什么这么做,请看第2)部分。
2)分组
要想将元素分为左边比key小,右边不比key小,需要遍历数组, 将每一个元素与key进行比较(最后一个元素,即key不需要比较),由于分成两个部分,所以至少需要一个变量来表示界限,这里定义int i,i及其左边的元素小于i, i+1指向元素key,i+1右边元素不小于key。代码如下:
2、sort
先进行partition,将数组分为两部分加key元素,再递归对两个部分进行排序,由于key左边小于key,右边不小于key,key的位置已经正确。
二、JAVA代码实现: