快速排序

/**
     * 快速排序
     * 思路:以数组的第一个值作为基准,首先从右到左,找到第一个小于基准的值,然后在从左到右,找到第一个大于基准的值,两个交换,
     * 然后就行左右移动,到相遇为止,将相遇位置的值跟基准交换,第一轮完成。这个时候,数组一分为二,左边是小于基准的,右边是大于
     * 基准的,然后两边数组继续这样比较。
     */
    private void fastsort(int[] array, int low, int high) {
        if (low > high) {
            return;
        }
        int t;
        int i = low;
        int j = high;
        // 基准点
        int temp = array[low];

        while (i < j) {
            //先看右边,依次往左递减(该循环会找到右边第一个小于基准的值)
            while (array[j] >= temp && i < j) {
                j--;
            }
            //看左边,依次往右递增(该循环会找到左边第一个大于基准的值)
            while (array[i] <= temp && i < j) {
                i++;
            }

            //如果满足条件则交换
            if (i < j) {
                t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }
        }
        //最后将基准为与i和j相等位置的数字交换
        arr[low] = arr[i];
        arr[i] = temp;

        //递给左边数组
        fastsort(arr, low, j - 1);

        //递归调用右半数组
        fastsort(arr, j + 1, high);

    }







fastsort(arr, 0, arr.length - 1);
fastsortTv.setText(Arrays.toString(arr));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值