具有嵌套循环的函数的时间复杂度

Time complexity of function with nested loops

我正在尝试了解如何确定 big-O,我已经找到了这个算法,但我不太确定我用这个算法进行的计算。

Compute(A,n,x):
begin
  l=0;
  r=n-1;
  while true do
     while l<r and A[l] < x do
         l=l+1;
     end
     while l<r and A[r] >= x do
         r=r-1;
     end
     if l>=r then
        return
     end
     tmp = A[l];
     A[l]=A[r];
     A[r]=tmp;
     l=l+1;
     r=r-1;
  end
end

我的猜测是 O(n*log(n)),但没有任何正确的理由。我当时的想法...

内部循环都有 O(n),所以我可以添加这两个,仍然有 O(n)。而外层循环会根据l,r结束,l,r都可以在内层循环增长,所以复杂度应该低于n,但是log(n)基本上只是一个猜猜

谁能帮我理解,如何以正确的方式处理这个问题?

编辑:正如评论中指出的那样,将 r=0 更改为 r=n-1。我的错。

如果您将 r 的初始值更改为 n-1(似乎这是一个愚蠢的错误),您将得到类似于 Hoare 分区(Quicksort 算法的一部分)的 O(n) 过程。

看看 - 左索引只向右移动,右索引只向左移动,循环工作直到它们相遇。

r=0; 没有意义 - 例程立即停止