Sortarea de tip bubble

#include <iostream>
using namespace std;
int main()
{

    int n,i,v[100],ok,aux;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    do
    {
        ok=0;
        for(i=1;i<n;i++)
            if(v[i]>v[i+1])
            {
                aux=v[i];
                v[i]=v[i+1];
                v[i+1]=aux;
                ok=1;
            }
    }
    while(ok==1);
    for(i=1;i<=n;i++)
    cout<<v[i]<<' ';
    return 0;
}

Obs.

1. În cazul în care toate elementele sunt ordonate crescător, algoritmul realizează n-1 comparații și nicio interschimbare.

2. În cazul în care toate elementele sunt ordonate descrescător, algoritmul realizează:

n*(n-1) comparații

((n-1)*n)/2 interschimbări

Permutarea circulară la stânga

Capture 2Deoarece numararea se face de la 1, v[0] nu va fi nefolosit; astfel, toate elementele vectorului se vor deplasa cu o pozitie spre stanga, iar apoi v[n] va prelua valoarea lui v[0].

In cazul in care numararea se va face incepand cu v[0], vom folosi o variabila auxiliara „aux”, care va prelua valoarea acestuia, se vor deplasa termenii, iar apoi v[n-1] (ultimul element din vector) va prelua la randul lui valoarea lui „aux”.

for(i=1;i<=n;i++)
    {
        v[i-1]=v[i];
        v[n]=v[0]
    }
        SAU
    aux=v[0]
    for(i=1;i<n;i++)
    {
        v[i-1]=v[i];
        v[n-1]=aux;
    }

Deplasarea la stânga

Capture

                       i ia valori de la k+1 la n; dupa eliminarea lui v[k] toti ceilalti termeni de dupa el se vor deplasa cu o pozitie spre stanga.

 for(i=k+1;i<=n;i++;)
    {
        v[i-1]=v[i];
        n--;
    }

Perechi de numere neconsecutive

  • v[1]  v[2] ……. v[i]  v[i+1]  ……. v[n]

(v[i] , v[j])     j ia valori de la i+1 pana la n;

                        i ia valori de la 1 pana la n-1;

 

  • v[1]  v[2]  ……. v[i-1]  v[i] …….v[n]

(v[i] , v[j])    j ia valori de la 2 pana la n;

                       i ia valori de la 1 pana la i-1;

Perechi de numere consecutive

Avem un vector cu urmatoarele elemente:

v[1]  v[2]  v[3]  v[4]  …… v[i-2]  v[i-1]  v[i] ….. v[n];

Perechi de 2 numere consecutive

(v[i-1] , v[i])        i va lua valori de la 2 pana la n;

(v[i] , v[i+1])        i va lua valori de la 1 pana la n-1;

Perechi de 3 numere consecutive

(v[i-2] , v[i-1] , v[i])          i va lua valori de la 3 la n;

(v[i-1] , v[i] , v[i+1])           i va lua valori de la 2 la n-1;

(v[i] , v[i+1] , v[i+2])          i va lua valori de la 1 la n-2;

Vectori-max si de cate ori apare

Acest program afiseaza elementul maxim si numarul lui de aparitii dintr-un vector

#include <iostream>

using namespace std;

int main()
{
    int n,i,maxi,k=0;
    cout<<"n=";cin>>n;
    int v[n];
    for(i=1;i<=n;i++)
    {
       cout<<"v["<<i<<"]=";
       cin>>v[i];
    }
    maxi=v[1];
    for(i=2;i<=n;i++)
    {
       if(v[i]>maxi)maxi=v[i];
       if(v[i]==maxi)k++;
    }
    cout<<maxi<<','<<k;
    return 0;
}

Vectori-cele mai mari/mici 3 elemente

#include <climits>

int n,i,min1,min2,min3;
    min1=min2=min3=INT_MAX
    cout<<"n=";cin>>n;
    int v[n];
    for(i=1;i<=n;i++)
    {
       cout<<"v["<<i<<"]=";
       cin>>v[i];
    }
    for(i=1;i<=n;i++)
    {
       if(v[i]<min1){min3=min2;min2=min1;min1=v[i];}
       else if(v[i]<min2){min3=min2;min2=v[i];}
       else if(v[i]<min3)min3=v[i];
    }
    cout<<min1<<','<<min2<<','<<min3;

Vectori-cel mai mare/mic element

#include <iostream>

using namespace std;

int main()
{
    int n,i,maxi;
    cout<<"n=";cin>>n;
    int v[n];
    for(i=1;i<=n;i++)
    {
       cout<<"v["<<i<<"]=";
       cin>>v[i];
    }
    maxi=v[1];
    for(i=2;i<=n;i++)
        if(v[i]>maxi)maxi=v[i];
    cout<<maxi;
                    SAU
    int mini;
    mini=v[1];
    for(i=2;i<=n;i++)
        if(v[i]<mini)mini=v[i];
    cout<<mini;
    return 0;
}

Vectori-afişare/scriere

#include <iostream>

using namespace std;

int main()
{
    int n,i;
    cout<<"n=";cin>>n;
    int v[n];
    for(i=1;i<=n;i++)
    {
       cout<<"v["<<i<<"]=";
       cin>>v[i];
    }
    for(i=1;i<=n;i++)
        cout<<v[i]<<',';
    return 0;
}