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!这只是我的好奇心!
答案 0 :(得分:6)
ara
是二进制搜索的递归实现。那就是O(log n)。
它被称为2n-1次。将这两个术语相乘,整个程序为O(n log n)。
答案 1 :(得分:0)
对我来说是线性的。但是你的格式很糟糕,所以很难分辨。
编辑:好的,涉及递归。那不是线性的。如果我们有有意义的变量名称会更容易。