【算法】剑指offer-快排

本文深入解析快速排序算法的实现细节,包括关键的partition和fastSort过程,并展示了如何运用快排思想解决剑指Offer中的两个问题:寻找最小的k个数及将数组排成最小的数。通过具体代码实例,帮助读者理解并掌握快速排序算法。
摘要由CSDN通过智能技术生成

快排

剑指 Offer 40. 最小的k个数

快排(紧记快排模板,partition & fastSort)

    int[] fastSort(int arr[], int l, int r){
        if(l < r){
            int pos = partition(arr, l, r);
            fastSort(arr, l, pos-1);
            fastSort(arr, pos+1, r);
        }
        return arr;
    }

    int partition(int[] arr, int l, int r){
        int tmp = arr[l];
        while(l < r){
            while(l<r && arr[r]>=tmp) r--;
            arr[l] = arr[r];
            while(l<r && arr[l]<=tmp) l++;
            arr[r] = arr[l];
        }
        arr[l] = tmp;
        return l;
    }

剑指 Offer 45. 把数组排成最小的数

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个

利用快排思想,比较拼接起来的字符串的大小,进行排序

    // 先把int数组转化成字符串数组,再进行快排(利用compareTo进行比较)其他与快排相同
    strings[i] = String.valueOf(nums[i]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值