快速排序算法复习(作废,推荐看三路非递归的方式)

public class 快排 {




    //平均情况: O(NlogN)
    //最坏情况逆序  n^2 N方
    //快排不稳定,由于关键字的比较和交换是跳跃进行的,因此,快速排序是一种不稳定的排序方法。
    //先前置验证,定义赋值subIJ和基准temp ,while加双while和if(都有subI<subJ)里面while一定先右后左,if里写第一对交换的,
    // subIJ相遇退出循环,基准归位,递归左右子数组sub需要+-1
    void 快排一趟递归单位(int[] arr, int i, int j) {
        if (i >= j) return;
        int subI = i;
        int subJ = j;
        int temp = arr[i];   //每次递归以第一个为基准

        while (subI < subJ) {

            while (subI < subJ && arr[subJ] >= temp) {
                subJ--;
            }
            while (subI < subJ && arr[subI] <= temp) {
                subI++;
            }

            //找到第一对需要交换的,之后还有第二对
            if (subI < subJ) {
                int t = arr[subJ];
                arr[subJ] = arr[subI];
                arr[subI] = t;
            }
        }

        //subIJ相遇,一趟全部交换完毕,子数组头(基准)归位(全局最终位置)
        arr[i] = arr[subJ]; //sub的元素补到数组头
        arr[subJ] = temp;   //(基准)归位

        //右sub索引传入递归左右子数组
        快排一趟递归单位(arr, i, subJ - 1);
        快排一趟递归单位(arr, subJ + 1, j);
    }


    public static void main(String[] args) throws Exception {
        快排 s = new 快排();
        int[] arr = new int[]{4, 3, 2, 3, 9, 1, 4, 5, 7, 2, 9, 3, 4, 8, 7, 9};
        s.快排一趟递归单位(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }
}


数据结构是我们必备课程,
在老师课上教过我们的排序有:
冒泡、插入、希尔、快速、堆排
这里快速排序和冒泡很像,但是快读排序比冒泡要好很多
体现在交换元素次数上,
冒泡要一个一个的挨着交换,
快速是以第一个元素为基准而且每一次元素归位都是他的最终位置
之后在以每一个子数组递归完成全部排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值