Bubble sort (bublinkové řazení) je jednoduchý stabilní řadící algoritmem se složitostí O(n^2). Vylepšením bubble sortu je shakersort (oboustranný bubble sort).

Princip

Pokud si představíme řazená čísla jako bublinky, tak ty s menší hodnotou jsou lehčí než ty s vyšší hodnotou a stoupají proto ve vodě rychleji.

Obdobně postupuje také bubble sort. Porovnává dva sousední prvky, a pokud je nižší číslo nalevo od vyššího, tak je prohodí (nižší číslo je lehčí a rychleji stoupá ke konci pole) a se stejnou logikou pokračuje na dalším indexu. Pokud jsou čísla ve správném pořadí, tak je neprohodí – pouze postoupí dále (algoritmus tím našel lehčí bublinku). Na konci iterace se tímto způsobem na konec pole vždy dostane ta nejlehčí bublinka (nejnižší číslo). Nyní algoritmus můžeme pustit znovu na redukovaný problém (na poslední pozici pole je již to správné číslo).

Po n-1 průchodech (poslední bublinka je seřazena triviálně) je pole seřazeno.

Vizualizace


Příklad

(3 2 8 7 6) //zadání pole, řaďmě od největšího k nejmenšímu
(3 2 8 7 6) // 3 a 2 jsou v korektním pořadí, posuňme se o index
(3 2 8 7 6) // 8 > 2, prohoďme je
(3 8 2 7 6) // 7 > 2, prohoďme je (zde je vidět probublávání nejlehčí dvojky vzhůru)
(3 8 7 2 6) // 6 > 2, prohoďme je
(3 8 7 6 2) // nový průchod polem: na posledním místě je nejlehčí prvek, tudíž se nám řazená úloha o jedna zkrátila, 8 > 3, prohoďme je
(8 3 7 6 2) // 7 > 3, prohoďme je
(8 7 3 6 2) // 6 > 3, prohoďme je
(8 7 6 3 2) // seřazeno

Kód

      function bubbleSort(array a)
          for i in 1 -> a.length - 1 do
              for j in 1 -> a.length - i - 1 do 
                  if a[j] < a[j+1] 
                      prohoď(a[j], a[j+1]);  
              
      /**
       * Bublinkove razeni (od nejvyssiho)
       * @param array pole k serazeni
       */
      public static void bubbleSort(int[] array){
          for (int i = 0; i < array.length - 1; i++) {
              for (int j = 0; j < array.length - i - 1; j++) {
                  if(array[j] < array[j+1]){
                      int tmp = array[j];
                      array[j] = array[j+1];
                      array[j+1] = tmp;
                  }
              }
          }
      }   
              
  /**
   * Bublinkove razeni (od nejmensiho)
   * @param array pole k serazeni
   * @param size velikost pole
   */
  void bubbleSort(int * array, int size){
      for(int i = 0; i < size - 1; i++){
          for(int j = 0; j < size - i - 1; j++){
              if(array[j+1] < array[j]){
                  int tmp = array[j + 1];
                  array[j + 1] = array[j];
                  array[j] = tmp;
              }   
          }   
      }   
  }    
              
          /**
           * Bublinove razeni (od nejmensiho po nejvetsiho)
           * @param arr pole k serazeni
           * @author Thomas (www.adamjak.net)
           */ 
          static void BubbleSort(int[] arr)
          {
              for (int i = 0; i < arr.Length - 1; i++)
              {
                  for (int j = 0; j < arr.Length - i - 1; j++)
                  {
                      if (arr[j + 1] < arr[j])
                      {
                          int tmp = arr[j + 1];
                          arr[j + 1] = arr[j];
                          arr[j] = tmp;
                      }
                  }
              }
          }
              
  /**
   * Bubble sort (descending order)
   * @param array array to be sorted
   * @auhor Pavel Micka
   */
  function bubbleSort(array){
      for (var i = 0; i < array.length - 1; i++) {
          for (var j = 0; j < array.length - i - 1; j++) {
              if(array[j] < array[j+1]){
                  var tmp = array[j];
                  array[j] = array[j+1];
                  array[j+1] = tmp;
              }
          }
      }
  }   
              
    procedure BubbleSort(var X : ArrayType; N : integer);
    var
      I,
      J : integer;
    begin
      for I := 2 to N do
        begin
          for J := N downto I do
            if (X[J] > X[J - 1]) then
              Swap(X[J - 1], X[J]);
        end
    end;
  
    procedure Swap(var X, Y : integer);
    var
      Temp : integer;
    begin
      Temp := X;
      X := Y;
      Y := Temp
    end;
              
  /**
   * Bublinkove razeni (od nejmensiho po nejvetsiho)
   * @param $arr pole, ktere bude usporadano
   * @author Thomas (www.adamjak.net)
   */ 
  function bubble_sort(&$arr) {
  
      $count = count($arr);
  
      for($i = 0; $i < $count - 1; $i++) {
          for($j = 0; $j < $count - $i - 1; $j++) {
              if($arr[$j + 1] < $arr[$j]) {
                  $tmp = $arr[$j + 1];
                  $arr[$j + 1] = $arr[$j];
                  $arr[$j] = $tmp;
              }
          }
      }
  } 
              

Rozbor

K seřazení pole bude zapotřebí celkem n-1 vnějších cyklů, protože při každém průchodu seřadíme jeden prvek na konec pole (tímto postupně zmenšujeme úlohu, proto se každým průchodem zmenšuje i počet procházených prvků ve vnitřním cyklu) a poslední prvek již není třeba řadit (jeden prvek je triviálně seřazen).

Poslední částí algoritmu je vnitřní podmíka, ve které orientace znaménka rozhoduje, zda-li budeme řadit vzestupně nebo sestupně.

Složitost

Vnitřní cyklus se provede

(n-1) + (n-2) + (n-3) + ... + (1) krát.

Což je celkem n-1 sčítanců a podle vzorce na aritmetickou posloupnost je počet operací

(pocetScitancu) * ((prvni + posledni)/2) = (n-1)*(n-1+1)/2 = (n2 - n)/2

Což je asymptoticky n^{2} (lineární funkce a konstanta rostou asymptoticky pomaleji, můžeme je zanedbat). Protože jde jak o nejhorší, tak o nejlepší případ, je výsledná asymptotická složitost \\Theta(n^{2}).


SEO od společnosti Digital Pylon


Online casino s algoritmem

České casino online online slot-vegas.cz

Hrajte nejlepší hry jako je GoodGame Empire.





Zajímavé články: Jak najít práci snů? Zvolte kariéru v IT!, Češi mají rádi hrací automaty online, Jak funguje algoritmické obchodování Casino, Online výuka Algoritmus a online marketing mají svá pravidla, Automaty, Matematický vliv, Ratings, Jak fungují algoritmy hazardních her online: více znalostí, více peněz, SYPWAI - nástroj pro vědecký vývoj, Vynikají na globálním trhu: Nejlepší vývojáři softwaru pro online výherní automaty, Jak si vybrat nejlepší české online casino, Proč byste měli hrát online casino VPN revoluce, Kde najdeme algoritmy v každodenním životě?, Čeká vás pracovní pohovor mimo město? Podívejte se, jak dokonale zvládnout včasný příchod, 5 úžasných technologií ze světa hazardních her, Mirror and access to Mostbet, Svou kancelář můžete mít stále po ruce, Jaké výhody má digitalizovaná firma oproti off-line konkurenci?, Jaký systém vybrat pro snadné řízení výroby?, Nahradí umělá inteligence ajťáky?, Důvody, proč používat SnapTik ke stahování videí TikTok, Dokonalý den na pláži: Co si vzít s sebou, aby byl výlet zábavný a bezpečný?, Jak přežít dlouhý let?, Go pay GoodGame Empire, Blockchain, Rozhovor


Doporučujeme

Internet pro vaši firmu na míru

https://www.algoritmy.net