C++ 为什么这个程序的复杂性是O(n)?

C++ 为什么这个程序的复杂性是O(n)?,c++,C++,为什么这个程序的复杂性是O(n)?for循环中有一个while循环。这不就是O(n^2)的复杂性吗 数组中的每个元素只访问一次。这具有O(N)的复杂性 外循环不进行N迭代,外循环的迭代次数N/k,乘以内循环的迭代次数k/2,就复杂度而言,给出了总迭代次数N/k*k/2=N/2,即O(N),首先确定两件事: 输入大小 基本操作 在您的情况下,输入的大小是数组arr的大小n,而基本操作是swap 然后回答这个问题: 如果输入n的大小加倍,您还需要执行多少基本操作swap 经过一些分析,您将得出结论,

为什么这个程序的复杂性是O(n)?
for
循环中有一个
while
循环。这不就是O(n^2)的复杂性吗


数组中的每个元素只访问一次。这具有O(N)的复杂性


外循环不进行
N
迭代,外循环的迭代次数
N/k
,乘以内循环的迭代次数
k/2
,就复杂度而言,给出了总迭代次数
N/k*k/2=N/2
,即
O(N)
,首先确定两件事:

  • 输入大小
  • 基本操作
  • 在您的情况下,输入的大小是数组
    arr
    的大小
    n
    ,而基本操作是
    swap

    然后回答这个问题:

    如果输入
    n
    的大小加倍,您还需要执行多少基本操作
    swap

    经过一些分析,您将得出结论,您还需要将
    swap
    操作的数量增加一倍,因为数组
    arr
    中的每个元素只交换一次


    因此复杂性是O(N),即与输入大小成线性关系。

    介意将代码添加到代码块中吗?每个
    都有
    k
    迭代,而
    for
    大约有
    N/2k
    迭代,所以总迭代次数是
    O(N)
    注意
    i
    是如何递增的。上面
    right
    的注释不正确。因为循环保证2k