Informatică, întrebare adresată de corinabaranov, 8 ani în urmă

Fiind dat un şir ordonat, să se scrie un program recursiv care realizează căutarea binară, prin împărţirea mulţimii iniţiale în două mulţimi care conţin 1/3 respectiv 2/3 din elementele mulţimii iniţiale.

Răspunsuri la întrebare

Răspuns de andrei750238
2

PROGRAM C++

#include <iostream>  

using namespace std;

int cautare_binara(int v[], int dim, int element) {

   int liminf = 0;

   int limsup = dim - 1;

   while (liminf <= limsup) {

       int mij = liminf + (liminf + limsup) / 3;

       if (v[mij] == element)return mij;

       if (v[mij] < element) {

           liminf = mij + 1;

       }

       else {

           limsup = mij - 1;

       }

   }

   return -1;

}

int main() {

   int v[100], n, x;

cout << "Dimensiune vector : ";

cin >> n;

cout << "Introduceti elemente vector CRESCATOR : ";

for (int i = 0; i < n; i++)

 cin >> v[i];

 

   cout << "Element de cautat : ";

   cin >> x;

   cout << "Elementul " << x << " se afla pe pozitia " << cautare_binara(v, n, x);

}

EXPLICATIE :

Programul este identic cu cel al cautarii binare cu exceptia faptului ca "mijlocul" se calculeaza dupa formula " int mij = liminf + (liminf + limsup) / 3 ".

NOTA :

In cazul in care exsita mai multe elemente cu aceasi valoare in sir se va returna pozitia primului gasit.

Am folosit cautarea binara sub forma de functie nerecursiva. In cazul formei recursive schimbarea care trebuie facuta este aceasi.

Anexe:

andrei750238: Pune intrebararile pe site. Daca o sa am timp si rabdare o sa le fac.
anonimanonim183: ma poți ajuta și pe mine cu o tema??
corinabaranov: Ok
anonimanonim183: te rog
anonimanonim183: imi poți spune pas cu pas?
anonimanonim183: macar atat @andrei750238
anonimanonim183: Te rog frumos
anonimanonim183: macar da-mi un raspuns
anonimanonim183: chiar nici asta nu vrei?
corinabaranov: Ce tema ai?
Alte întrebări interesante