1:基本原理
通过,一趟排序将待排序数据分割成两个独立的部分,其中一部分数据比另一部分数据小,则可分别再继续对这两部分继续排序,以达到整个序列有序的目的。
2:具体解释
第一轮:
第二轮:
按照上面逻辑不断迭代,直到全部分割为不能迭代的情况。
3:代码实现
//快速排序算法 public void QuickSort(int[]array){ QSort(array,0,array.length-1); } //快速排序递归算法 public void QSort(int[]array,int low,int high){ int pivot; if(low<high){ //算出枢轴值,pivot将array一分为二 pivot = Partution(array,low,high); //对低子表递归排序 QSort(array,low,pivot-1); //对高子表递归排序 QSort(array,pivot+1,high); } } //交换数组种子表的记录,是枢轴记录到位,并返回其所在位置 //此时,在之前所有记录都小于该记录位置, public int Partution(int[]array,int low,int high){ //去最低位为枢轴值 int pivotkey = array[low]; //当low大于等于high时,停止 while(low<high){ while(low<high&&array[high]>=pivotkey){ high--; } swap(array,low,high); while(low<high&&array[low]<=pivotkey){ low++; } swap(array,low,high); } //经过前面的交换,返回当前枢轴值所在位置。 return low; } //由于排序中,最经常使用就是交换操作,对数组进行交换操作 public void swap(int[]array,int i,int j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; }