2017-04-14 55 views
0

嘿我想找到一個二進制搜索的比較數我已使這種方法來計算比較數。然而,它總是返回-1,因爲它沒有找到numsearch,儘管數組包含數字。 這是我的方法.. count指的是比較的數量。二進制搜索方法的循環數

public static int BinarySearch (int n, Integer[] ran) { 
    int low = 0; 
    int high = ran.length-1; 
     int count = 0; 
    int middle; 
    while (low<=high) { 

     count++; 
     middle = (high - low)/2; 
     if (ran[middle] == n) { 
      return count; 
     } 
     else if (ran[middle] > n) { 
      high = middle - 1; 

     } 
     else { 
      low = middle + 1; 

     } 

    } 


    return -1;   
    } 

回答

0

更改最後一行從return -1return count

+0

我試過了,但是它返回2或者繼續循環,我必須手動停止它 – Dom

+0

代碼本身並不是真正正確的。也許你應該檢查你的實現。我會改變'中間=(高 - 低)/ 2;'到'中等=(高+低)/ 2;' – john16384

+0

謝謝兄弟,我已經改變了代碼。然而,它給了我5或4 – Dom

0
public static int BinarySearch(int n, Integer[] ran) { 
    int low = 0; 
    int high = ran.length - 1; 
    int count = 0; 
    while (high >= low) { 
     count++; 
     int middle = (low + high)/2; 
     if (ran[middle] == n) { 
      return count; 
     } 
     if (ran[middle] < n) { 
      low = middle + 1; 
     } 
     if (ran[middle] > n) { 
      high = middle - 1; 
     } 
    } 
    return count; 
} 
+0

謝謝兄弟我認爲我找到了解決方案,因爲排序的數組是在降序,所以我不得不改變,如果(跑[中]> n){lowlevel = middle + 1 ; } if(ran [middle] Dom