www.manualy.net
logo
Originální stránky pro originální lidi. Výrobky chráněných dílen
Google

Třídící algoritmy: Bubble Sort

19.2. 2007 Vebloud Algoritmy

Třídit pole, respektive jakoukoliv množinu dat je docela užitečná věc. Tudíž se budu chvilku věnovat třídícím algoritmům. První část seriálu bude o Bubble sortu, na pochopení nejjednodušším ale také nejpomalejším algoritmem, takzvaným bublákem.

Složitost:

Složitost algoritmu BubbleSort je Ο(n2), což ho odsuzuje do použití na malých polích. Ale je to jeden z nejrychlejších způsobů jak zjistit, zda je pole setříděné.

Princip:

Začnu od prvního prvku a porovnám ho s druhým. Pokud je první větší, prvky prohodím, pokračuji na druhý prvek a znovu porovnám, takto pokračuji, dokud se nedostanu nakonec. Tím zajistím, že největší prvek pole je na konci pole. Takto jedu znovu od začátku, ale zarazím se o jeden prvek před koncem, protože vím, že tam je největší prvek. Toto opakuji tolikrát, kolik prvků má pole. Resoektive tak dlouho dokud je co třídit, což znamená, že pokud projdu jednu sekvenci od začátku do konce, bez jediného prohození prvku, je setříděno.

Vývojový diagram:

Vývojový diagram bubble sortu
Kód v Jave:
public void bubbleSortAsc(Int[] array) {
  int x;
  for (int i = 0; i < array.length; i++) {
    for (j = 1; j array.length - 1 - i; j++) {
      if (array [j-1] > array [j]) {
        x = array [j-1];
        array [j-1] = array [j];
        array [j] = x;
      }
    }
  }
}

public void bubbleSortDesc(Int[] array) {
  int x;
  for (int i = 0; i < array.length; i++) {
    for (j = 1; j array.length - 1 - i; j++) {
      if (array [j-1] < array [j]) {
        x = array [j-1];
        array [j-1] = array [j];
        array [j] = x;
      }
    }
  }
}
Kód Delphi:
procedure BubbleSort(Items: Array of Integer);
var
  done: boolean;
  i, n: integer;
  Dummy: string;
begin
  n := Length(Items);

  repeat
    done := true;
    for i := 0 to n - 2 do
      if Items[i] > Items[i + 1] then
      begin
        Dummy := Items[i];
        Items[i] := Items[i + 1];
        Items[i + 1] := Dummy;

        done := false;
      end;
  until done;
end;

DatumAutorPříspěvek
29. 04. 2007 18:23 Anešš

ict

28. 05. 2010 21:04 ingasha

algoritmus pro bubble sort máte špatně