Ordonați elementele unui vector folosind metoda bulelor, după ultima cifra.
Răspunsuri la întrebare
#include <iostream>
using namespace std;
int main(){
int v[100],aux;
unsigned n,i;
//Citire date
cin >> n;
for(i=0;i<n;i++) cin >> v[i];
//Sortare
bool sortat=0;
//Cat timp vectorul nu e sortat
while(!sortat){
//Presupune ca e sortat
sortat=1;
//Verifica daca exista doua elemente consecutive nesortate
for(i=0;i<n-1;i++){
if(v[i]%10 > v[i+1]%10){
//Daca exista atunci vectorul nu e sortat
sortat=0;
//Interschimba elementele
aux = v[i];
v[i]=v[i+1];
v[i+1]=aux;
}
}
}
//Afisare vector sortat
for(i=0;i<n;i++) cout << v[i] << " ";
}
Răspuns:
#include <iostream>
using namespace std;
int main()
{ int n, v[20], i, sortat;
cout<<"n= "; cin>>n;
cout<<"Introduceti elementele vectorului: ";
for(i=1; i<=n; i++) cin>>v[i];
do
{ sortat=1;
for(i=1; i <n; i++)
if (v[i]%10> v[i+1]%10) {int aux=v[i]; v[i]=v[i+1]; v[i+1]=aux; sortat=0;}
}while (!sortat);
cout<<"Dupa sortare: "<<endl;
for(i=1;i<=n;i++ ) cout<<v[i]<<" ";
return 0;}
Explicație:
Pentru a sorta un vector prin metoda bulelor se procedeaza in felul urmator:
1) se porneste cu presupunerea ca vectorul este sortat (marcam acest lucru cu ajutorul unei variabile sortat care initial are valoarea 1)
2) se compara fiecare doua elemente invecinate. Daca nu sunt in ordinea dorita, se interschimba si se marcheaza faptul ca vectorul nu este sortat (var sortat i se atribuie valoarea 0).
Pasii 1 si 2 se executa repetitiv, cat timp vectorul nu este sortat (adica atata timp cat sortat este 0 sau !sortat).
In problema ta, se cere sa se sorteze elementele vectorului dupa ultima cifra, deci la pasul 2 comparam ultima cifra pt doua componente invecinate (ultima cifra a unui numar nat n este n%10) . In cazul in care cele doua cifre sunt in ordinea dorita, interschimbam elementele vectorului.