Sunteți pe pagina 1din 3

ALGORITMI CU VECTORI ORDONAȚI

Cautare binara
Căutarea binară se bazează pe tehnica de programare Divide et Impera.
Elementul căutat este „verificat” cu mijlocul vectorului. Dacă elementul este
egal cu elementul din mijloc, căutarea se termină. Însă dacă nu sunt egale, se
compară valoarea elementului din mijloc cu cea a elementului de căutat. Dacă
elementul este mai mare se continua căutarea de la mijlocul listei până la sfârșit,
iar dacă este mai mic se continuă căutarea de la început până la mijloc.

#include <iostream>
using namespace std;
int main()
{
int mij,n=7,i,x=10,v[7]={4,5,8,10,20,45,76},st,dr,gasit=0;
st=0;
dr=n-1;
mij=(st+dr)/2;
while ( (st<=dr) && (!gasit) )
{
if (v[mij]==x) gasit=1;
else if (v[mij]<x) st=mij+1;
else dr=mij-1;
mij=(st+dr)/2;

}
if (gasit) cout<<x<<" se afla in vector pe pozitia "<<mij;
else cout<<x<<" nu se afla in vector";
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int mij,n=7,i,x=7,v[7]={4,5,8,10,20,45,76},st,dr,gasit=0;
st=0;
dr=n-1;
mij=(st+dr)/2;
while ( (st<=dr) && (!gasit) )
{ cout<<"il caut pe "<<x<<" de la poz "<<st<<" la poz "<<dr<<" ";
cout<<" mijlocul intervalului este poz "<<mij<<" si aici ";
if (v[mij]==x) {gasit=1;cout<<"il gasesc"<<endl;}
else { cout<<"nu-l gasesc"<<endl;
if (v[mij]<x) st=mij+1;
else dr=mij-1;}
mij=(st+dr)/2;

}
if (gasit) cout<<x<<" se afla in vector pe pozitia "<<mij;
else cout<<x<<" nu se afla in vector";

return 0;
}
Interclasarea a doi vectori

Fiind dați doi vectori sortați, prin interclasarea lor se înțelege construirea unui al
treilea vector sortat care să conțină toate elementele acestora.
În continuare, vom considera că vrem să interclasăm vectorii a, de lungime m, și
b, de lungime n, formând un vector c, de lungime p. Toți vectorii vor fi indexați
de la 0.
Exemplu
a=⟨1,4,5,5,7,9⟩ b=⟨2,3,5,6,7⟩ rezulta c=⟨1,2,3,4,5,5,5,6,7,7,9⟩

Așadar, algoritmul iterativ (ce se folosește în principal de o structură repetitivă)


sună astfel:

Reținem în i poziția curentă din a, iar în j poziția curentă din b. Inițializăm i


și j cu 0. Reținem de asemenea în p lungimea curentă a lui c, care inițial este 0.
Parcurgem simultan cei doi vectori, cât timp i<m și j<n.
Dacă (a[i]<b[j]) - atunci c[p] devine a[i], și îi incrementăm pe i și p.
- altfel, c[p] devine b[j], și îi incrementăm pe j și p.
- Inserăm în c elementele rămase din a.
- Inserăm în c elementele rămase din b.
//interclasarea (fragment)
…………………..
i = 0, j = 0;
while (i < m && j < n)
if (a[i] < b[j])
c[p++] = a[i++];
else
c[p++] = b[j++];
while (i < m)
c[p++] = a[i++];
while (j < n)
c[p++] = b[j++];
……………………
Temă COMPLETATI SPAȚIILE PUNCTATE ASTFEL ÎNCÂT
PROGRAMUL SĂ DEVINA FUNCȚIONAL.

S-ar putea să vă placă și