快速排序(两头交换法)

快速排序(java运行,两头交换法的个人理解记录)

//快排
import java.util.Arrays;
public class work5 {

    public static void main(String[] args) {
        int[] a={45,23,76,12,37,72,35,65,6};
        System.out.println(Arrays.toString(a));
        int l=0,r=a.length-1,p=a[0];
        sort(a,l,r);
        System.out.println(Arrays.toString(a));

    }


    public static void sort(int[] arr, int left, int right){
        if(left > right)   //如果left已经在right右边了,那就速速退出方法
            return;

        int tmp = arr[left];   //设最左边的值是基准
        int i = left;     //用i,j表示
        int j = right;
        while(i != j){    //i j不相等时循环

            //必须先进行j(右边指针)的查找,顺序不可变
            while(arr[j] >= tmp && j > i)  //j向左找比tmp小的,如果arr[j]比tmp大,进入循环
                j--;         //”j--“,j继续向左前进一位

            while(arr[i] <= tmp && j > i)   //i向右找比tmp大的,如果arr[i]比tmp小,进入循环
                i++;        //”i++“,i继续向右前进一位

            if(j > i){    //当跳出两个while循环,说明i j都已经找到并停下,这个时候,交换arr[i]和arr[j]的值
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }

        }
        //i j相等时跳出循环
        arr[left] = arr[i];    //把相遇时的值赋给最左侧,left在循环外定义没有改变,仍是最左侧的值,也就是tmp


        //一次大循环结束,重新定义“tmp”
        arr[i] = tmp;
        sort(arr, left, i-1);   //left没变,还代表最左,最右是i-1
        sort(arr, i+1, right);
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值