将整个数组分为三个部分,中轴,中轴前部,中轴后部。每一次排序,前一部分<中轴<后一部分。
然后采用分而治之的思想继续排序。
其算法如下:
public static void quickSort(int[] array,int low,int high){ if(low>=high){ return; } int lowIndex=low; int highIndex=high; int middle=array[lowIndex]; while(lowIndex<highIndex){ //将第一个数(中轴)与最后一个数进行比较,如果第一个数比最后一个数小,就和其前一个数 //进行比较,以此类推。直到找到比第一个数小的值 while(lowIndex<highIndex&&middle<array[highIndex]){ highIndex--; } //将比第一个数(中轴)大的数放入中轴处。 if(lowIndex<highIndex){ array[lowIndex++]=array[highIndex]; } //经中轴与前一部分刚刚中轴所在处的后一位数进比较,如果比该数大,那么就和该数的后一位数进行比较, //以此类推。直到找到比中轴大的数。 while(lowIndex<highIndex&&middle>array[lowIndex]){ lowIndex++; } //将比中轴小的数放入刚刚空出来的数那个位置。 if(lowIndex<highIndex){ array[highIndex--]=array[lowIndex]; } array[lowIndex]=middle; quickSort(array, low,lowIndex-1 ); quickSort(array, lowIndex+1, high); } }