2014-12-27 106 views
-2

我正在學習K & R.他爲特定函數(二進制搜索)提供代碼,但不提供完整程序。除main()之外還有什麼需要讓這個運行?K&R二進制搜索代碼

// binsearch: find x in v[0] <= v[1] <= ... <= v[n-1] 

#include <stdio.h> 

int binsearch(int x, int v[], int n) 
{ 
    int low, high, mid; 

    low = 0; 
    high = n - 1; 
    while (low <= high) { 
     mid = (low + high)/2; 
     if (x < v[mid]) 
      high = mid - 1; 
     else if (x > v[mid]) 
      low = mid + 1; 
     else //found match 
      return mid; 
    } 
    return -1; //no match 
} 
+1

從技術上說,沒有別的。現在你有什麼試圖把你的'main()'放進去? – Quentin

+0

沒什麼。這是一個完整的功能。 –

+0

我的主要是 int main() { \t binsearch(91,v [100],100); \t return 0; } – kits

回答

4

你不顯示陣列v的聲明或初始化當你寫:

我主要是int main() { binsearch(91, v[100], 100); return 0; }

如果v是一個全局變量,它會初始化爲全零。符號v[100]將要求v爲至少101個int *的數組,並且要素v[100]將需要指向至少100個按排序順序排列的的數組。更有可能的是,你的意思和需要的是這樣的:

int main(void) 
{ 
    int v[] = 
    { 
     -98, -96, -94, -93, -90, -89, -86, -86, -85, -83, 
     -81, -75, -73, -73, -71, -69, -64, -63, -62, -62, 
     -61, -61, -56, -54, -53, -50, -49, -47, -46, -43, 
     -43, -43, -39, -38, -37, -34, -33, -32, -25, -25, 
     -24, -21, -20, -16, -15, -14, -11, -10, -9, -5, 
     -5, -1, +1, +1, +2, +3, +4, +16, +16, +18, 
     +19, +19, +21, +21, +22, +23, +23, +24, +25, +25, 
     +29, +30, +32, +33, +34, +35, +36, +37, +41, +52, 
     +55, +57, +57, +57, +58, +59, +60, +61, +68, +68, 
     +69, +70, +70, +75, +83, +83, +83, +91, +96, +97, 
    }; 
    int x = binsearch(91, v, 100); 

    if (x < 0) 
     printf("Element 91 not found in array\n"); 
    else 
     printf("Found 91 at entry %d (%d)\n", x, v[x]); 

    return 0; 
} 

作爲擴展練習,考慮採取值從參數查找到程序,而不是硬連線91的值。