快速排序

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;
    }

 

posted @ 2020-03-26 19:48  大朱123  阅读(122)  评论(0编辑  收藏  举报