快速排序详解及其代码实现

快速排序

1、原理以及具体实现

1、首先将待排序数组中第一个数作为基准数

2、定义两个游标left,right分别表示标识数组的开始和结束

3、定义两个游标i,j用于分别寻找比基准大的数,比基准小的数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VBKG2ZTh-1655056789419)(C:\Users\wu\Desktop\培训笔记\图片\QQ截图20220521165235.png)]

4、j游标向前移动直到找到第一个比基准数小的数值停止,但要保证j不能小于i

//j去找比当前基准小的
while (arr[j]>=base&&i<j){//同时保证j不能小于i
     j--;
}

5、i游标向后移动直到找到第一个比基准数大的数值停止,但要保证i不能大于j

//i去找比当前基准大的
while (arr[i]<=base&&i<j){//同时保证j不能小于i
     i++;
}

6、i,j对应的数值进行交换

7、重复4,5,6步直到i,j相遇

8、基准数和相遇位置的数进行交换,此时你会发现基准数已经放在了最终结果的位置

9、以基准数为起始点,分为左右两部分,重复前6步,直到数据都被拆分开为止

2、图示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pslvPlqM-1655056789420)(C:\Users\wu\Desktop\培训笔记\图片\QQ截图20220521172305.png)]

3、代码实现

递归边界设置为left>=right,而不仅仅是left=right的原因是可能会出现下面的情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ttVNOwUn-1655056789421)(C:\Users\wu\Desktop\培训笔记\图片\QQ截图20220521173847.png)]

    public static void quicksort(int[] arr,int left,int right){
        if(left>=right){
            return;
        }
        int i=left,j=right;
        int base=arr[left];
        while (i!=j){
            //j去找比当前基准小的
            while (arr[j]>=base&&i<j){
                j--;
            }
            while (arr[i]<=base&&i<j){
                i++;
            }
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        arr[left]=arr[i];
        arr[i]=base;
        //递归操作左右两个子数组
        quicksort(arr,left,j);
        quicksort(arr,j+1,right);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值