Prin sortarea unui vector se înţelege aranjarea elementelor în ordine crescătoare sau
descrescătoare!
Rezolvare problemei
Soluție:
#include <iostream>
using namespace std;
int main(){
int n,a[51],i,j,aux;
cout<<"n= ";cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if(a[j]<a[i]){
aux=a[i];
a[i]=a[j];
a[j]=aux;}
cout<<"Vectorul sortat crescator este: ";
for(i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;}
Soluție:
#include <iostream>
using namespace std;
int main(){
int n,a[51],i,j,aux,ok;
cout<<"n= ";cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
do{
ok=1;
for(i=1;i<n;i++)
if(a[i]>a[i+1]){
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
ok=0;}
}while(!ok);
cout<<"Vectorul sortat crescator este: ";
for(i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
Căutarea secvențială
Fie un vector a cu n componente numere întregi(neordonate), se pune problema de a stabili
dacă o valoare dată x se găseşte sau nu printre elementele vectorului. Căutarea secvențială
presupune parcurgerea vectorului element cu element, cu condiția că în momentul în care elementul
căutat s-a găsit, căutarea de oprește. Pentru acesta se folosește variabila ok, care se inițializează cu
0(cu semnificația că la început presupunem că elementul căutat nu există în vector), iar la o
comparare dacă elementul căutat există ok=1(adică presupunerea a fost falsă, deci elementul există).
Soluție:
#include <iostream>
using namespace std;
int main(){
int n,a[51],i,ok=0,x;
cout<<"n= ";cin>>n;
cout<<"x= ";cin>>x;
for(i=1;i<=n;i++) cin>>a[i];
i=1;
while(i<=n&&!ok)
if(a[i]==x) ok=1;
else i++;
if(ok) cout<<x<<" gasit";
else cout<<"NU";
return 0;
}
Căutare binară
Fie un vector a cu n componente numere întregi SORTATE CRESCĂTOR, se pune
problema de a stabili dacă o valoare dată x se găseşte sau nu printre elementele vectorului.
Ideea de la care se porneşte este următoarea: căutarea se efectuează într-un interval [li,ls],
unde li este limita inferioară a intervalului, mai exact indicele primului element din vector iar ls este
limita superioară, mai exact indicele ultimului element din vector. La modul general intervalul
iniţial de căutare este [1,n].
În continuare procedăm astfel :
⇒ calculăm indicele componentei din mijloc :
k: = (li+ls ) div 2;
⇒ pot exista 3 situaţii :
o dacă a[k]=x atunci se afişează un mesaj corespunzător şi căutarea se încheie cu
succes
o dacă a[k]<x atunci se reiniţializează intervalul de căutare: li:= k+1 şi ls
o dc a[k]>x atunci intervalul de căutare va fi: li şi ls:=k-1
⇒ căutarea se încheie când x a fost găsit sau când li>ls . Când li>ls atunci înseamnă că x nu se
găseşte în vector.
Soluție:
#include <iostream>
using namespace std;
int main(){
int n,a[51],i,li=1,ls,ok=0,k,x;
cout<<"n= ";cin>>n;
cout<<"x= ";cin>>x;
for(i=1;i<=n;i++) cin>>a[i];
ls=n;
do{
k=(li+ls)/2;
if(a[k]==x){
cout<<x<<" gasit pe pozitia "<<k<<endl;
ok=1;
}
else
if(a[k]<x)
li=k+1;
else ls=k-1;
}while((li<=ls)&&(!ok));
if (li>ls) cout<<"Numarul cautat nu se gaseste in vector"<<endl;
return 0;}
Exemplu :
n=7
x = 13
-1 3 5 6 9 13 18
li=1 ls=7
k=4 => v[k]=6 , 6 < 13 => li=5 si ls =7
k = 6 => v[k]=13 13 = 13 => Valoare gasita.