Ordonați elementele unui vector folosind metoda bulelor, după ultima cifra.​

Răspuns :

#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] << " ";

}

Vezi imaginea Andrei750238

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.