快速排序.

//快速排序:小的放左边-A-大的放右边,A就排好序了
//主流的划分法:交换法、挖空法
//交换法:左边的大数和右边的小数交换一下就好啦
//挖空法:碰到一个不好的数就换一下
//这个正宗合理

代码实现

 public static void quickSort(int[] arr,int left,int right){
        if (left>=right){
            //递归结束的条件
            return;
        }
        //key为基准数
       int key =arr[left];
        int i=left;
        int j=right;
        while (i<j){
            //因为基数是左,所以要从右边先找
            //第一个位置的值被保存了,所以可以覆盖掉,最后一步再将第一个值给填回来。
            while (i<j&&arr[j]>=key){
                //从最右向左找到第一个小于p的位置j
                j--;
            }
            while (i<j&&arr[i]<=key){
                //从最左向右找到第一个大于p的位置j
                i++;
            }
            if (i<j){
                //交换i和j
                swap(arr,i,j);
            }
        }
//当i和j相遇时,说明temp的左边数都小于等于key,右边的数都大于等于key

       //交换key和结束时的值
       swap(arr,i,left);
//temp位置已经确定,递归快速排序左右两边的数
       quickSort(arr,left,i-1);  //i-1排除中间的基数
       quickSort(arr,j+1,right);

   }
    public static void swap(int[] arr,int i,int j){
        int temp=0;
        temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }

这个up讲解的非常好

视频讲解:

https://www.bilibili.com/video/BV1pd4y1z7gf/?spm_id_from=333.337.search-card.all.click&vd_source=5745b9adf3e729682d6c53f1fa2974ab

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木心Fx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值