快速排序的java实现

2 篇文章 0 订阅
public class Quick {
    public static void main(String[] ary) {
        Quick q = new Quick();
        int[] arry = {
            49, 2, 6, 9, 6, 13, 0
        };
        q.sort(arry, 0, arry.length - 1);
        System.out.println(Arrays.toString(arry));
    }

    /**
     * 一次排序单元,完成此方法,key左边都比key小,key右边都比key大。
     * 
     * @param array 排序数组
     * @param low 排序起始位置
     * @param high 排序结束位置
     * @return 单元排序后的数组
     */
    private int sortUnit(int[] array, int low, int high) {
        int key = array[low];
        while (low < high) {
            // 从后向前搜索比key小的值
            while (array[high] >= key && high > low)
                --high;
            // 比key小的放左边
            array[low] = array[high];
            // 从前向后搜索比key大的值,比key大的放右边
            while (array[low] <= key && high > low)
                ++low;
            // 比key大的放右边
            array[high] = array[low];
        }
        // 左边都比key小,右边都比key大。将key放在游标当前位置。此时low等于high
        array[high] = key;
        return high;
    }

    /**
     * 快速排序
     * 
     * @param arry
     * @return
     */
    public void sort(int[] array, int low, int high) {
        if (low >= high) {
            return;
        }
        // 完成一次单元排序
        int index = sortUnit(array, low, high);
        // 对左边单元进行排序
        sort(array, low, index - 1);
        // 对右边单元进行排序
        sort(array, index + 1, high);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值