Sortarea elementelor unui vector



Metoda bulelor (bubble sort)

#include <iostream>

using namespace std;

int main()
{
   int n, v[11];
   cin>>n;
   for(int i=1;i<=n;i++)
      cin>>v[i];
   //il vom sorta crescator
   bool sortat;
   do
   {
      sortat=1; //presupunem ca este sortat
      for(int i=1;i<n;i++)
         if(v[i]>v[i+1]) //le vom interschimba
         {
            int aux=v[i];
            v[i]=v[i+1];
            v[i+1]=aux;
            sortat=0; //am gasit un element care e mai mic decat urmatorul
         }
   } while (!sortat);
   for(int i=1;i<=n;i++)
      cout<<v[i]<<' ';
}

Explicatie:

- citim elementele vectorului
- ne vom lua o variabila in care vom stoca 1 daca vectorul este sortat sau 0 altfel
- inainte de a le parcurge vom presupune ca acesta este sortat
- vom tot compara doua elemente consecutive, iar in cazul in care gasim un numar care e mai mare decat succesorul acestuia le vom interschimba si in variabila sortat vom pune 0, deoarece nu este sortat
- tot comparand doua cate doua si interschimbandu-le vectorul nostru se va sorta, practic de fiecare data noi ducem cel mai mare dintre numere pe ultima pozitie, penultima pozitie ... si tot asa pana ajungem la un element care nu mai poate fi dus




Metoda selectiei minimului

#include <iostream>

using namespace std;

int main()
{
   int n, v[11];
   cin>>n;
   for(int i=1;i<=n;i++)
      cin>>v[i];
   //il vom sorta crescator
   for(int i=1;i<n;i++)
   {
      int p=i;
      for(int j=i+1;j<=n;j++)
        if(v[j]<v[p])
            p=j;
      int auv=v[i];
      v[i]=v[p];
      v[p]=auv;
   }
   for(int i=1;i<=n;i++)
      cout<<v[i]<<' ';
}

Explicatie:

- citim elementele vectorului
- pentru fiecare pozitie de la 1 la n-1 vom cauta cel mai mic element de la pozitia curenta in colo si vom memora pozitia pe care se afla
- dupa ce am cautau vom aduce elementul respectiv pe pozitia i, interschimband elementul cu minimul




Cu ajutorul unei functii predefinite

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
   int n, v[11];
   cin>>n;
   for(int i=1;i<=n;i++)
      cin>>v[i];
   //il vom sorta crescator
   sort(v+1, v+n+1);
   //se sorteaza elementele de pe pozitiile din intervalul [primul_parametru, ultimul_parametru)
   for(int i=1;i<=n;i++)
      cout<<v[i]<<' ';
}

Explicatie:

- citim elementele vectorului
- aceasta functie sorteaza crescator elementele in functie de pozitiile oferite de cei doi parametrii