You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

快速排序分区方法中空体嵌套while循环的Big O时间复杂度疑问

快速排序嵌套空体内层循环的分区方法时间复杂度是多少?

我遇到了这样一个快速排序的分区实现,它采用嵌套循环结构,但内层循环为空体,特此咨询该实现的时间复杂度(Big O)是多少?

实现代码如下:

public static int partition(int[] arr, int start, int end) {
    int pivot = arr[start];
    int i = start;
    int j = end;
    while (i < j) {
        while (i < j && arr[--j] >= pivot) ;
        if (i < j) {
            arr[i] = arr[j];
        }
        while (i < j && arr[++i] <= pivot) ;
        if (i < j) {
            arr[j] = arr[i];
        }
    }
    arr[j] = pivot;
    return j;
}

回答

这个分区方法的时间复杂度是O(n),其中n是当前分区内的元素总数(即end - start + 1),具体分析如下:

  • 首先看两个空体的内层循环:第一个内层循环从j的位置向左移动指针,直到找到小于基准值pivot的元素,或者i >= j时停止;第二个内层循环则从i的位置向右移动指针,直到找到大于pivot的元素,或者i >= j时停止。
  • 核心关键点是:每个元素最多会被遍历一次。j从右往左扫过的元素不会被重复扫描,i从左往右扫过的元素也不会回头处理。整个过程中,i和j的移动范围加起来覆盖了分区内的所有元素,没有重复遍历的情况。
  • 外层的while循环会在i和j相遇时终止,每次外层循环迭代都会缩小i和j之间的距离,不会出现无限循环。
  • 剩下的赋值操作都是O(1)的常数时间操作,不会对整体时间复杂度产生影响。

另外补充说明:这个实现本质上和经典的Hoare分区算法是完全一致的,只是把内层循环的执行体写成了空语句(依赖循环条件里的--j和++i来完成指针移动),核心逻辑没有变化,所以时间复杂度和经典Hoare分区算法保持一致,都是线性的O(n)。


内容的提问来源于stack exchange,提问作者Ahmed Raza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:24:07