快速排序模板

    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]中 值已保存;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值