快速排序模板

    public int[] sortArray(int[] arr) {
        quickSort(arr, 0, arr.length-1);
        return arr;
    }

    void quickSort(int[] arr, int l, int r) {
        if (l<r) { //符合条件
            int i = Partition(arr,l,r); //将数组划分为大小两部分 划分点位置为i
            quickSort(arr, l, i-1);  //左半部分排序
            quickSort(arr, i+1, r);  //右半部分排序
        }
    }

    int Partition(int[] arr, int l, int r) {
        int temp = arr[l]; //以第一个元素为划分点(基准数)
        int i=l, j=r;
        while(i<j) {
            //从后向前 比基准数大符合要求 继续向前
            while(i<j && arr[j]>=temp) j--;
            arr[i]=arr[j]; //此时的j比基准数小 交换到前面的位置
                        
            //从前向后 比基准数小符合要求 继续向后
            while(i<j && arr[i]<=temp) i++;
            arr[j]=arr[i];
            
        }
        //最后
        arr[i] = temp; //此时i=j i即为划分位置 将划分点放在此处
        return i; //返回划分点
        
    }

注:arr[i]=arr[j]覆盖了arr[i]怎么办?

第一次,arr[i]=temp 值已保存;之后,arr[i]保存在上一个arr[j]中 值已保存;

对于arr[j]=arr[i],同理 arr[j]保存在上一个arr[i]中 值已保存;


版权声明:本文为weixin_51395834原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。