这段代码的大O表示法

时间:2010-01-13 22:47:38

标签: c big-o

int ara(int dizi[], int ilk, int son, int deger) { 
      int indeks;    
      if ( ilk > son ) 
        return 0; 

      indeks = (ilk + son) / 2; 
      if ( dizi[indeks] < deger ) 
        return ara(dizi, indeks+1, son, deger); 
       else if ( dizi[indeks] > deger ) 
        return ara(dizi, ilk, indeks-1, deger); 
       else  
       return 1; 
} 

for (i=1; i<2*n; i++)   { 
    printf("Bir sayi giriniz: "); 
    scanf("%d", &sayi); 
    sonuc = ara(matrix, 0, n-1, sayi); 
    if ( sonuc == 1 ) 
      printf("Found!\n"); 
     else 
      printf("Not Found!\n");  
}

这段代码的大O符号是什么?我的猜测是N *(2 ^(logN))

我已经分配了我的hw!这只是我的好奇心!

2 个答案:

答案 0 :(得分:6)

ara是二进制搜索的递归实现。那就是O(log n)。

它被称为2n-1次。将这两个术语相乘,整个程序为O(n log n)。

答案 1 :(得分:0)

对我来说是线性的。但是你的格式很糟糕,所以很难分辨。

编辑:好的,涉及递归。那不是线性的。如果我们有有意义的变量名称会更容易。