for (int i = 1; i <= n; i++){  while(arr[i] != i){  t = arr[arr[i]];  arr[arr[i]] = arr[i];  arr[i] = t;  } }}有人说上面的代码的时间复杂度是o(n)那么是不是可以说下面的代码时间复杂度为o(0)呢?也就是说复杂度为零?
 for (int i = 1; i <= n; i++){}

解决方案 »

  1.   

    第一段代码中的while循环油三条语句,时间复杂度是o(n),如果是一条语句,时间复杂度也是o(n),那么如果是100条语句(100条语句中不包含if、while、for、switch、三元运算符),时间复杂度也是o(n)?
      

  2.   

    还有空间复杂度的疑问。第一段代码的用途是将范围在1-N(N>n)之间的n个互不相等的自然数排序。按照多数人的观点,由于不论n多么大,都只额外占用一个变量,所以其空间复杂度是o(1),是不是根本不考虑变量的类型?那么假如我解决这个这个排序用的下面的方法:
        将一块大小为N/8的内存命名为a,每一位都是默认的0.遍历给定的n个数,把a中第k个位置设为1
    这个算法时间复杂度肯定是o(n),没有最好的情况和最坏的情况。其空间复杂度呢?是不是因为只用了一块内存a,空间复杂度就是1?
      

  3.   


    当然不是0了,你每次都要进行i++,还有最上面的代码while有可能是死循环