Bubble sort

Алгоритам за сортирање bubble sort ради тако што више пута пролази кроз низ и пореди два суседна елемента низа и ако су погрешно распоређени замењује им места. Пролаз кроз низ се понавља док се не изврше све потребне замене.
После поређења свих суседних парова најмањи елеменат ("bubble" - мехурић) ће испливати на почетак низа. Због тога се овај метод назива метод мехурића.
Овај алгоритам није ефикасан за низове са великим бројем елемената.

Слика 1. Bubble sort алгоритам


Пример 1. Програм који сортира у растућем поретку низ који корисник уноси преко конзоле методом bubble sort.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Buble_sort
{
  
    class Program
    {

        static void Main(string[] args)
        {
            int i, n;
            Console.Write("Unesite broj elemenata niza: ");
            n = Convert.ToInt32(Console.ReadLine());
            
            int[] a = new int[n];
            // Unos clanova niza
            for (i = 0; i < n; i++)
            {
                Console.Write("\n Unesite [" + (i + 1).ToString() + "] element: ");
                a[i] = Convert.ToInt32(Console.ReadLine());
            }
            Console.Write("\n");
            // Ispis unetog niza
            Console.Write("Uneli ste niz brojeva: ");
            for (int j = 0; j < n; j++)
            Console.Write(a[j] + " ");

            Console.WriteLine("\n \n Da li zelite da vidite sortiranje niza korak po korak? Unesite DA/NE");

            string odgovor = Console.ReadLine();

            if (odgovor == "DA")
            {   // Sortiranje niza metodom buble sort

                  /* Promenljiva zam govori da li je izvrsena zamena u i-tom prolazu kroz niz pa ako nije
                       sortiranje je zavrseno jer su svaka dva susedna elementa niza u odgovarajucem poretku */
                   int zam, pom, j;
                   zam = 1;
                   for (i = n - 1; zam > 0 && i > 0; i--)
                   for (zam = 0, j = 0; j < i; j++)
                   if (a[j] > a[j+1])
                   {
                       // Zamena odgovarajucih clanova niza
                          pom = a[j];
                          a[j] = a[j+1];
                          a[j+1] = pom;
                       /* Posto je u i-tom prolazu izvrsena bar ova zamena zam se postavlja
 			    na 1 sto nastavlja sortiranje */
                       zam = 1;
                       Console.Write("\n Trenutni raspored clanova niza: ");
                       for (int k = 0; k < n; k++)
                       {
                           Console.Write(a[k] + " ");

                       }
                         
                    }
                       
                    
                    Console.WriteLine("\n");
                    Console.Write("Niz nakon sortiranja: ");
                    for (int k = 0; k < n; k++)
                        Console.Write(a[k] + " ");
                    Console.Write("\n");
              }

              else if (odgovor == "NE")
              { 
                   /* Sortiranje unetog niza metodom buble sort.
                   Promenljiva zam govori da li je izvrsena zamena u i-tom prolazu kroz niz pa ako nije
                   sortiranje je zavrseno jer su svaka dva susedna elementa niza u odgovarajucem poretku */
                   int zam, pom, j;
                   zam = 1;
                   for (i = n - 1; zam > 0 && i > 0; i--)
                   for (zam = 0,j = 0; j < i; j++)
                   if (a[j] > a[j+1])
                   {
                          // Zamena odgovarajucih clanova niza
                          pom = a[j];
                          a[j] = a[j+1];
                          a[j+1] = pom;
                          /* Posto je u i-tom prolazu izvrsena bar ova zamena 
                          zam se postavlja na 1 sto nastavlja sortiranje */
                          zam = 1;
                   }

                    Console.Write("\n Niz nakon sortiranja: ");
                    for (int k = 0; k < n; k++)
                    {
                        Console.Write(a[k] + " ");
                    }
                    
                }

                else
                {
                    Console.Write("\n Greska! Morate uneti DA/NE! \n");
                }

                // Beskonacna petlja, da bi se video rezultat programa na kraju.
                for (; ; );

              }
           
    }

}



Напомена: За сортирање у опадајућем поретку у следећој if конструкцији
if (a[j] > a[j+1])
променити знак > у знак <.


Слика 2. Резултат претходног примера