в массиве, используя линейный(первое вхождение) и бинарный (последнее вхождение)алгоритмы поиска. Проблема в том что бинарный поиск показывает последнее значение в некоторых ситуациях(зависит от того как заполниться рандомно массив) на одну ячейку раньше. Что не так в коде?
                  
                  
                  #include <iostream>
                  
                  
                  #include <algorithm>
                  
                  
                  using namespace std;
                  
                  
                  void linsearch(int* a, int n, int key) {
                  
                  
                      a[n] = key;
                  
                  
                      int i=0;
                  
                  
                      while (a[i] != key) i++;
                  
                  
                      if (i == n)
                  
                  
                          cout << "\nЭлемент не найден"<<endl;
                  
                  
                      else
                  
                  
                          cout << "\n\nЛинейный поиск:" << endl;
                  
                  
                          cout << "Первое вхождение элемента найдено на позиции под номером " << i+1<<"\n"<<endl;
                  
                  
                  };
                  
                  
                  void binsearch(int* a, int n, int key) {
                  
                  
                      int l = 0, r = n - 1, s;
                  
                  
                      bool Found = false;
                  
                  
                      while ((l <= r) && !Found)
                  
                  
                      {
                  
                  
                          s = (l + r) / 2;
                  
                  
                              if (a[s] == key)
                  
                  
                                  Found = true;
                  
                  
                              else
                  
                  
                                  if (a[s] < key)
                  
                  
                                      l = s + 1;
                  
                  
                                  else
                  
                  
                                      r = s - 1; 
                  
                  
                      }
                  
                  
                      cout << "================================================================";
                  
                  
                      cout << "\nБинарный поиск:";
                  
                  
                      if (Found == true) cout << "\nПоследнее вхождение элемента найдено на позиции под номером " <<s+1<< " \n"<<endl;
                  
                  
                      else cout << "Элемент не найден!\n";
                  
                  
                  }
                  
                  
                  int a[100];
                  
                  
                  int main() {
                  
                  
                      setlocale(LC_ALL, "Ru");
                  
                  
                      int I, n,l,r,s;
                  
                  
                      int key;
                  
                  
                      cout << "Элемент=";
                  
                  
                      cin >> key;
                  
                  
                      cout << "Введите размер массива:";
                  
                  
                      cin >> n;
                  
                  
                      for (I = 0; I < n; I++)
                  
                  
                      {
                  
                  
                          a[I] = rand() % 10;
                  
                  
                          cout <<a[I]<<" ";
                  
                  
                      }
                  
                  
                      sort(a, a + n);
                  
                  
                      cout << "\nОтсортированный массив" << endl;
                  
                  
                      for (I = 0; I < n; I++)
                  
                  
                      {
                  
                  
                          cout << "|" << a[I];
                  
                  
                      }
                  
                  
                      linsearch(a, n, key);
                  
                  
                      binsearch(a, n,key);
                  
                  
                      system("pause");
                  
                  
                      return 0;
                  
                  
                  }
                  
                  
                
Бинарный поиск должен искать в сортированном массиве, там понятия "первый" и "последний" как-то странно выглядят
Обсуждают сегодня