2017-01-30 2 views
-1

ПРИСТУПАЯ неправильный выход -1 и -1 это происходит в разделе еще нет компиляции ошибки времени получения выходного сигнала -1Двоичный поиск не дает правильный вывод

> Here the code is going out of the loop for all test cases how?I am unable to understand what is the mistake as I am new to programming 

пожалуйста, помогите мне задал довольно похожий вопрос в линейном поиске Это итеративный подход, который пытался даже с рекурсивным не работает.

int bin_search(int A[], int left, int right, int k) 
{ 
    int found=0,mid; 
    mid=(left+right)/2; 
    if(right>=1) 
    { 
     if(k>A[left]) 
     { 
      left=k; 
      bin_search(A,mid+1,right,k); 
     } 
     else if(k<A[right]) 
     { 
      right=k; 
      bin_search(A,left,mid-1,k); 
     } 
     else if(A[mid]=k) 
     { 
      return mid; 
     } 

    } 
    else return -1; 
} 
int main() 
{int n; 
int A[]={1,2,3,4,5}; 
int a=bin_search(A,0,n-1,4); 
printf("%d ",a); 
} 
+3

Вы должны _really_ инвестировать немного времени в попытке использовать последовательное форматирование. Это ужасно смотреть. – miradulo

+0

Прочтите предупреждения компилятора. (Если вы не получили предупреждение компилятора, включите предупреждения компилятора.) – user2357112

+2

Отформатируйте повествование и код, пожалуйста. Мы будем тратить на это столько времени, сколько вы это просили. –

ответ

0

Вот правильный код

#include <iostream> 
 
using namespace std; 
 

 
int bin_search(int A[], int left, int right, int k) 
 
    { 
 
     int found=0,mid; 
 
     mid=(left+right)/2; 
 
     if(left <= right) 
 
     { 
 
     if(k>A[mid]) 
 
     { 
 
      left=mid+1; 
 
      bin_search(A,mid+1,right,k); 
 
     } 
 
     else if(k<A[mid]) 
 
     { 
 
      right=mid-1; 
 
      bin_search(A,left,mid-1,k); 
 
     } 
 
     else if(A[mid]=k) 
 
     { 
 
      return mid; 
 
     } 
 

 
    } 
 
    else return -1; 
 
} 
 
int main() 
 
{  int n = 5; 
 
     int A[]={1,2,3,4,5}; 
 
     int a=bin_search(A,0,n-1,2); 
 
     printf("%d ",a); 
 
}

+0

Извините, что ваш код дает то же самое неправильное вывод, который я получаю, - это -1. – DjVasu

+0

инициализировать n с размером массива n = sizeof (arr)/sizeof (arr [0]); – DjVasu

+0

Я изменил код Теперь он работает нормально. –

Смежные вопросы