算法-快速排序

采用左右指针交替遍历的方式进行排序:

1、取第一个数为比较基准

2、定义左右指针为基准数据加一和结尾

3、先移动左指针,如果数据大于基准,交换两者的位置。如果小于等于基准,则继续移动

4、如果左指针交换位置,则开始移动右指针,如果小于基准,交换两者位置,如果大于基准,则继续移动(然后交替移动左右指针)

5、如果指针重合,将基准数据放到该位置上。当前循环结束

6、这里得到基准左侧全部小于基准数据,右侧全部大于基准数据

7、将左右两侧分别重复递归上述操作,直到单侧只剩余一个数据时退出递归

    public static void kuaipai(int[] arr, int l, int r) {
            if (l >= r) {
                return;
            }
            int left = l, right = r;
            int mid = arr[right];
            while (l < r) {
                // 左指针向右移动
                while (arr[l] <= mid && l < r) {
                    l++;
                }
                if (arr[l] > mid && l < r) {
                    arr[r] = arr[l];
                }

                // 右指针向左移动
                while (arr[r] > mid && l < r) {
                    r--;
                }
                if (arr[r] <= mid) {
                    arr[l] = arr[r];
                }
                if ( l >= r) {
                    arr[l] = mid;
                }
            }
            kuaipai(arr, left, r - 1);
            kuaipai(arr, r + 1, right);

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值