快速排序练习

b站学习的,自己写一遍加深记忆

思想
①先选择一个基准数作为参照物(例如第一个数)
②小于基准数的放在左边,一直小于就一直给left++
大于的放在右边,一直大于就right–
知道他们相等,然后把基准值赋给arrleft
③ 递归方法 分别对左边的和右边的进行递归操作,就可以了

import java.util.Arrays;
public class Sort {
    public static void main(String[] args) {
        int [] arr={19,91,9,17,1,8};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    public static void quickSort(int arr[],int l,int r)
    {
        if(l>=r)
        {
            return;
        }
        int left=l,right=r;
        int provit=arr[left];
        while(left<right)
        {
            //如果右边的值一直大于基准值,那么right就一直减减
            while(left<right&&arr[right]>provit)
            {
                right--;
            }
            if(left<right)
            {
                arr[left]=arr[right];
            }
            //如果左边的值一直小于基准值,那么left就一直加加
            while (left<right&&arr[left]<provit)
            {
                left++;
            }
            if(left<right)
            {
                arr[right]=arr[left];
            }
            //如果他们right==left了 第一轮的排序就结束,把基准值赋予他们相等的地方
            if(left>=right)
            {
                arr[left]=provit;
            }
        }
        //然后递归实现  left==right  左边与右边的排序
        System.out.println("..........1");
        //左边的
        quickSort(arr,l,right-1);
        //右边的
        quickSort(arr,left+1,r);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值