中心思想:选定一个基准(通常是第一个数),要把比他大的放他后面,比他小的放他前面。
为了提高效率,用两个游标i和j,j从尾开始找到第一个比基准小的,i从头开始找到第一个比基准大的,找到后把i、j位置的数交换。i、j继续移动直到他们相遇,相遇位和基准位交换,这时,基准位左边都比他小,右边都比他大,第一次排完。然后基准位左右两个序列递归前面的处理。
public static void quickSort(int[] a,int start ,int end){
int index = start;//基准数位置
int temp;//交换数据时用的临时变量
if(start>=end) return;//start=end说明基准位、i、j重合,无需移动;start>end可以说明这两个数都没有越界(上一局start=i+1不会越界,因为end=上一次的end,保证了start<end就能保证start不越界;另一种情况同理)
int i=start,j = end;//i从start开始,否则用+1可能越界!
while(i<j){//循环,直到i=j
while(a[j]>=a[index]&&i<j) j--;//找到第一个比基准位小的位置;注意!!j在变化,所以每次移动都要判断相遇没有
while(a[i]<=a[index]&&i<j) i++;