快速排序模板

本文深入探讨了快速排序算法,这是一种基于分治思想的高效排序方法。通过选取基点,利用左右指针进行交换,确保左右两侧有序,最终实现整个数组的排序。文中提供了两种不同的实现方式,分别是迭代与递归,详细解释了每一步操作。快速排序以其平均时间复杂度为O(n log n)而被广泛使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序

主要思想是分治,寻找基点,使左右有序

  • 使用左右指针交换,不能等于
    public static  void quick(int[] nums,int l,int r){
        if(l>=r) return;
        int target = nums[l];
        int i = l;
        int j = r;
        while(i<j){

            while(i<j&&nums[i]<=target){
                i++;
            }

            while(j>i&&nums[j]>target){
                j--;
            }
            if(i<j){
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
            }
        }
        quick(nums,l,j);
        quick(nums,j+1,r);

    }

  • 挖空填充,从后向前遍历
public static void sort(int[] a, int low, int high) {
        //已经排完
        if (low >= high) {
            return;
        }
        int left = low;
        int right = high;

        //保存基准值
        int pivot = a[left];
        while (left < right) {

            //从后向前找到比基准小的元素
            while (left < right && a[right] >= pivot)
                right--;
            a[left] = a[right];
            //从前往后找到比基准大的元素
            while (left < right && a[left] <= pivot)
                left++;
            a[right] = a[left];

        }
        // 放置基准值,准备分治递归快排
        a[left] = pivot;
        sort(a, low, left - 1);
        sort(a, left + 1, high);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值