Home c++ binary search does not work, or rather RETURN C++

binary search does not work, or rather RETURN C++

Author

Date

Category

wrote a binary search algorithm, the Return works incorrectly.
If you do a Void function with an answer output, then it works …


/ * binary search * /
#Include & lt; iostream & gt;
#Include & lt; vector & gt;
Using Namespace STD;
Int BinarySearch (int find, vector & lt; int & gt; numbers, int left, int right) {
  Int Mid = Left + Right + 1 & gt; & gt; 1;
  if (Find == Numbers [MID]) RETURN MID;
  Find & GT; Numbers [MID]? BinarySearch (Find, Numbers, Mid + 1, Right): BinarySearch (Find, Numbers, Left, Mid - 1);
}
INT MAIN () {
  INT N, FIND;
  CIN & GT; & GT; n;
  Vector & lt; int & gt; Numbers (N);
  For (int i = 0; i & lt; n; ++ i) {
    CIN & GT; & GT; Numbers [i];
  }
  CIN & GT; & GT; Find;
  COUT & LT; & LT; BinarySearch (Find, Numbers, 0, N - 1);
}

Answer 1, Authority 100%

First, you hope that you will enter the elements of the vector in sorted order. In such cases, why enter them at all, if you can immediately initialize the vector with these data? But, TV any cases does not prevent you from checking if the vector is sorted? There is a standard algorithm for this.

Secondly, the function of the binary search must be written correctly. You call recursively function, but do not use the value returned and do not return anything. And if there is no such element? What then? And if MID & LT; = 0 What then? In any case, if the function should return something, it must return under any circumstances. And for what logic you have int MID = Left + Right + 1 & gt; & gt; 1; ? Where are the brackets in the expression that performs several operations? Are you confident in priorities? … And why is another unit add to the average element (this is nothing)? And why are you copying the vector? … and the division operation must be performed if the condition is performed. As a result, if you write like this:

int
BinarySearch (Int Find, Const Vector & LT; Int & GT; & Amp; Numbers, Int Left, Int Right) {
  int Mid = (Right - Left);
  if (MID & GT; 0) {
    MID & GT; & GT; = 1;
    If (Find! = Numbers [MID])
      // Pay attention to the assignment
      Mid = Find & gt; Numbers [MID]
         . BinarySearch (Find, Numbers, Mid + 1, Right)
         : BinarySearch (Find, Numbers, Left, Mid);
  }
  Return MID;
}

Where Right The index of the last element, the function will return the desired result. It is even better to pass the unsigned type as indexes, and with the const modifiers and return the same type from the function (Unsigned MID). Then it will be clear that you do not need to transfer a negative number, and your function does not change their values.

Programmers, Start Your Engines!

Why spend time searching for the correct question and then entering your answer when you can find it in a second? That's what CompuTicket is all about! Here you'll find thousands of questions and answers from hundreds of computer languages.

Recent questions