快速排序partition写法(一道力扣题目引出的Lomuto和Hoare的partition方法区别)

本文通过一道力扣题目169 多数元素,探讨快速排序中Lomuto与Hoare两种partition方法的区别。作者发现虽然两者在大多数情况下表现相近,但在处理重复元素较多的情况时,Hoare的partition方法能更均匀地划分数组,从而提高排序效率。文章通过实例分析和代码对比,解释了两种方法的运作原理。

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

做力扣的一道题目:

169 多数元素

的时候,用到了快速排序,所以复习了一下快排。

一、快排

快排思想就是:

  1. 选定一个哨兵元素pivot;
  2. 把小于pivot的元素放在pivot左边,大于pivot的放在右边,这样,划分完后pivot就在自己最终应该在的位置了;
  3. 对于pivot位置的左边和右边,递归进行 1、2 的过程。

其中,quickSort就是主方法,是分支递归的过程,2的步骤就是核心的partition方法,他进行划分,使得每一轮用 O(n) 的时间确定了一个元素的位置。

因此快速排序的渐近时间复杂度是 O(nlogn)。

快排代码:

    public void quickSort(int[] nums){
   
        sort(nums, 0, nums.length-1);
    }
	//递归
    public void sort(int[] nums, int i, int j){
   
        if( i >= j )return;//递归结束条件
        int p = partition(nums, i, j);
        sort(nums, i, p-1);
        sort(nums, p+1, j);
    }
	//划分
    public int partition(int[] nums, int i, int j){
   
        //选最左边为哨兵
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值