2016-11-14 9 views
-1

私のバイナリサーチコードは、このコードでは動作しませんなぜ私は思ったんだけど(見られるように、それはすべてを返す):私のバイナリ検索は、if文がこの順番でしか動作しないのはなぜですか?

int BinarySearch(int arr[], int len, int target) { 
    int first = 0; 
    int last = len-1; 
    int mid = (first+last)/2; 
    while (first <= last) { 
     mid = floor((first+last)/2);    
     if (target = arr[mid]) { 
      return 1; 
     } else if (target < arr[mid]) { 
      last = mid-1; 
     } else { 
      first = mid+1; 
     } 
    } 
    return -1; 
} 

しかし、次の作品を。唯一の違いは、whileループのif文の順序です。

int BinarySearch(int arr[], int len, int target) { 
    int first = 0; 
    int last = len-1; 
    int mid = (first+last)/2; 
    while (first <= last) { 
     mid = floor((first+last)/2);    
     if (arr[mid] < target) { 
      first = mid+1; 
     } else if (target = arr[mid]) { 
      return 1; 
     } 
     else { //arr[mid] < target 
      last = mid-1; 
     }   
    } 
    return -1; 
} 
+3

場合(使用しそうであるように間違っている** == * * arr [mid]) – Ari0nhh

+1

2番目のコードは実際に動作しますか? –

答えて

1
if (target = arr[mid]) 

これは割り当てだけでなく、比較したものです。 targetarr[mid]と等しくなります(値が0以外の場合はブロックを入力します)。

+0

D'oh ...それを逃した!ありがとう! – userrandomnums

1

if (target = arr[mid]) {本当に? ==を意味しますか?

上記の回答に加えて、=オペレータは、割り当てが成功した場合に割り当てられた値を割り当てて返します。たとえば。 printf("%d", (a = 10));を実行すると、10が表示されます。したがって、ifステートメントで代入演算子を使用すると、if (10)(または他の何らかの数値)のようになり、ifブロックが実行されます。 if (a = 0)ブロックが実行されないことが明らかになったと思います。if HTH。

1
if (target = arr[mid]) 

これは をターゲットに値を代入すると明らかに比較したいので、この

if (target == arr[mid]) 

が標的二==

関連する問題