算法:快速排序

没有元素间的交换操作;
基本操作:填坑(赋值运算);
快速排序用到递归思想;

快排法,是改进后的冒泡排序法
一趟排序后,把集合分成左右两个子集合,基准数左边元素的称之为小集合,右边元素称之为大集合。


一趟排序


从图中描述的一趟排序过程可以看出,期间数组存在脏数据--坑,排序过程称之为填坑过程。

代码实现:

    /**
     * 快速排序,由小到大
     */
    public static int[] sortBy(int[] ints) {
        sortBy(ints, 0, ints.length - 1);
        return ints;
    }


    private static void sortBy(int[] ints, int lo, int li) {
        if (lo >= li) {
            return;
        }
        //选取最左边的元素为基准数
        int baseElement = ints[lo];
        int left = lo, right = li;
        /**一趟排序完成结束循环*/
        while (lo < li) {
            //由右向左扫描,找到小于基准数的元素
            while (li > lo) {
                if (ints[li] < baseElement) {
                    break;
                }
                li--;
            }
            if (li > lo) {
                ints[lo++] = ints[li];
            }
            //由左向右扫描,找到大于基准数的元素
            while (li > lo) {
                if (ints[lo] > baseElement) {
                    break;
                }
                lo++;
            }
            if (li > lo) {
                ints[li--] = ints[lo];
            }
        }
        ints[lo] = baseElement;
        sortBy(ints, left, lo - 1);
        sortBy(ints, lo + 1, right);
    }

时间复杂度:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值