Metode de sortare – metoda bulelor (Bubble Sort)

Principiul acestei metode este următorul: se parcurge şirul, schimbându-se valori adiacente, dacă este cazul. La prima parcurgere cheia de valoare maximă migrează spre ultima poziţie. La a doua parcurgere, cheia de valoare imediat inferioară celei maxime migrează spre penultima poziţie. Datorită acestor migrări, metoda a fost denumită astfel, deoarece elementele de valori mari se ridică la suprafaţă asemenea unor bule.

Metoda se aseamănă oarecum cu sortarea prin selecţie, doar că partea sortată se formează în “Partea dreaptă” a şirului, aceasta crescând până când toate elementele sunt cuprinse în ea.
3 7 4 9 2 8 j=1,5 i=5 – Pe rând, se compară a[j-1] cu a[j], pentru j=1 pana la 5. Dacă a[j-1] > a[j] se inversează. Deci inversăm 7 cu 4, apoi 9 cu 2 și 9 cu 8.
3 4 7 2 8 9 j=1,4 i=4 – i=4; vom compara a[j-1] cu a[j] pentru j=1 până la 4. Dacă a[j-1] > a[j] se inversează. Deci inversăm 7 cu 2.
3 4 2 7 8 9 j=1,3 i=3 – i=3; vom compara a[j-1] cu a[j] pentru j=1 până la 3. Dacă a[j-1] > a[j] se inversează. Deci inversăm 4 cu 2.
3 2 4 7 8 9 j=1,2 i=2 – i=2; vom compara a[j-1] cu a[j] pentru j=1 până la 2. Dacă a[j-1] > a[j] se inversează. Deci inversăm 3 cu 2.
2 3 4 7 8 9 j=1,1 i=1 – i=1; vom compara a[j-1] cu a[j] pentru j=1 până la 1. Dacă a[j-1] > a[j] se inversează. Nu avem inversări.
2 3 4 7 8 9 Șirul este sortat


#include "stdio.h"
#include "conio.h"
void bubble_sort(int a[],int n)
{
  int i,j,elem;
  for(i=n-1;i > 0;i--)
    for(j=1;j <= i;j++)       if(a[j-i]>a[j])
      {
        elem=a[j-i];
        a[j-1]=a[j];
        a[j]=elem;
      }
}

void main(void)
{
  int n,a[100],i;
  printf("Introdu dim şirului:");
  scanf("%d",&n);
  printf("Introdu elem şirului: \n");
  for(i=0;i < n;i++)   {     printf("a[%d]=",i);     scanf("%d",a+i);   }   bubble_sort(a,n) ;   printf("Sirul sortat este: ");   for(i=0;i < n;i++)   printf("%d ",a[i]);   putchar("\n");   getch(); }

Leave a Reply

Your email address will not be published. Required fields are marked *

4 × two =

Time limit is exhausted. Please reload CAPTCHA.