快速排序

 递归快速排序算法

/**
     * 快速排序 排成由小到大的
     * @param arr 数组
     * @param l 低位,开始一般为0
     * @param h 高位,开始一般为 arr.length - 1
     */
//    /**
//     * 排成由小到大的
//     */
    private static void qsort(int[] arr,int l,int h){
        if (l>h) return;
        int i=l,j=h,a,temp;
        // 基数赋值
        a = arr[l];
        while (i<j){

            // 先看右边,依次往左递减,尝试找到一个比基数小的
            while (i<j && arr[j] >= a){
                // 所以,如果此数比基数大,并且j还在i右边,就j--继续寻找
                j--;
            }

            // 再看左边,依次往右递增,尝试找到一个比基数大的
            while (i<j && arr[i] <= a){
                // 所以,如果此数比基数小,并且j还在i左边,就i++继续寻找
                i++;
            }

            // 锁定i,j就可以交换了
            if (i<j){
                temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
            }
        }
        // 当不满足i<j就结束循环
        // 最后将基数与i位置的数字交换
        arr[l] = arr[i];
        arr[i] = a;
        // 递归,左半边数组排序
        qsort(arr,l,i-1);
        qsort(arr,i+1,h);

    }




最优    时间复杂度    O(nlogn)
最坏                 O(n^2)    (n-1 递归调用,第i 次需n-i 次比较)
平均                 O(nlogn)

最优    空间复杂度    O(logn)
最坏                 O(n)        (需要进行n-1 次递归调用)
平均                 O(logn)

非递归排序算法

参考博客https://blog.csdn.net/qq_26122557/article/details/79458649

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值