Bublinové řazení je nejjednodušší třídicí algoritmus to funguje tak, že opakovaně zaměňuje sousední prvky, pokud jsou ve špatném pořadí. Tento algoritmus není vhodný pro velké soubory dat, protože jeho průměrná a nejhorší časová složitost je poměrně vysoká.
Algoritmus bublinového třídění
Doporučený postup Bublinové třídění Vyzkoušejte!V algoritmu Bubble Sort,
- přejíždějte zleva a porovnejte sousední prvky a vyšší je umístěn na pravé straně.
- Tímto způsobem se největší prvek přesune nejprve na pravý konec.
- Tento proces pak pokračuje hledáním druhého největšího a jeho umístěním a tak dále, dokud nejsou data setříděna.
Jak Bubble Sort funguje?
Pojďme pochopit fungování bublinového třídění pomocí následujícího obrázku:
Vstup: arr[] = {6, 0, 3, 5}
První průchod:
Největší prvek je umístěn na správnou pozici, tj. na konec pole.
Bublinový třídicí algoritmus: Umístění největšího prvku na správnou pozici
Druhý průchod:
Umístěte druhý největší prvek do správné polohy
Bublinový třídicí algoritmus: Umístění druhého největšího prvku na správnou pozici
Třetí průchod:
Umístěte zbývající dva prvky na jejich správné pozice.
Bubble Sort Algorithm : Umístění zbývajících prvků na jejich správné pozice
- Celkový počet průchodů: n-1
- Celkový počet srovnání: n*(n-1)/2
Implementace Bubble Sort
Níže je implementace bublinového řazení. Pokud vnitřní smyčka nezpůsobila žádnou swap, lze ji optimalizovat zastavením algoritmu.
C++ // Optimized implementation of Bubble sort #include using namespace std; // An optimized version of Bubble Sort void bubbleSort(int arr[], int n) { int i, j; bool swapped; for (i = 0; i < n - 1; i++) { swapped = false; for (j = 0; j < n - i - 1; j++) { if (arr[j]>arr[j + 1]) { swap(arr[j], arr[j + 1]); zaměněno = pravda; } } // Pokud nebyly žádné dva prvky prohozeny // vnitřní smyčkou, pak break if (swapped == false) break; } } // Funkce pro tisk pole void printArray(int arr[], int velikost) { int i; pro (i = 0; i< size; i++) cout << ' ' << arr[i]; } // Driver program to test above functions int main() { int arr[] = { 64, 34, 25, 12, 22, 11, 90 }; int N = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, N); cout << 'Sorted array:
'; printArray(arr, N); return 0; } // This code is contributed by shivanisinghss2110> C // Optimized implementation of Bubble sort #include #include void swap(int* xp, int* yp) { int temp = *xp; *xp = *yp; *yp = temp; } // An optimized version of Bubble Sort void bubbleSort(int arr[], int n) { int i, j; bool swapped; for (i = 0; i < n - 1; i++) { swapped = false; for (j = 0; j < n - i - 1; j++) { if (arr[j]>arr[j + 1]) { swap(&arr[j], &arr[j + 1]); zaměněno = pravda; } } // Pokud nebyly vnitřní smyčkou prohozeny žádné dva prvky, // pak break if (swapped == false) break; } } // Funkce pro tisk pole void printArray(int arr[], int velikost) { int i; pro (i = 0; i< size; i++) printf('%d ', arr[i]); } // Driver program to test above functions int main() { int arr[] = { 64, 34, 25, 12, 22, 11, 90 }; int n = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, n); printf('Sorted array:
'); printArray(arr, n); return 0; }> Jáva // Optimized java implementation of Bubble sort import java.io.*; class GFG { // An optimized version of Bubble Sort static void bubbleSort(int arr[], int n) { int i, j, temp; boolean swapped; for (i = 0; i < n - 1; i++) { swapped = false; for (j = 0; j < n - i - 1; j++) { if (arr[j]>arr[j + 1]) { // Zaměnit arr[j] a arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = teplota; zaměněno = pravda; } } // Pokud nebyly žádné dva prvky // prohozeny vnitřní smyčkou, pak break if (swapped == false) break; } } // Funkce pro tisk statického pole void printArray(int arr[], int size) { int i; pro (i = 0; i< size; i++) System.out.print(arr[i] + ' '); System.out.println(); } // Driver program public static void main(String args[]) { int arr[] = { 64, 34, 25, 12, 22, 11, 90 }; int n = arr.length; bubbleSort(arr, n); System.out.println('Sorted array: '); printArray(arr, n); } } // This code is contributed // by Nikita Tiwari.> Python3 # Optimized Python program for implementation of Bubble Sort def bubbleSort(arr): n = len(arr) # Traverse through all array elements for i in range(n): swapped = False # Last i elements are already in place for j in range(0, n-i-1): # Traverse the array from 0 to n-i-1 # Swap if the element found is greater # than the next element if arr[j]>arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] swapped = True, pokud (proměněno == False): break # Kód ovladače k otestování výše, pokud __name__ == '__main__': arr = [64, 34, 25, 12, 22, 11, 90] bubbleSort(arr) print('Sorted array:') for i in range(len(arr)): print('%d' % arr[i], end=' ') # Tento kód upravil Suraj krushna Yadav> C# // Optimized C# implementation of Bubble sort using System; class GFG { // An optimized version of Bubble Sort static void bubbleSort(int[] arr, int n) { int i, j, temp; bool swapped; for (i = 0; i < n - 1; i++) { swapped = false; for (j = 0; j < n - i - 1; j++) { if (arr[j]>arr[j + 1]) { // Zaměnit arr[j] a arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = teplota; zaměněno = pravda; } } // Pokud nebyly žádné dva prvky // prohozeny vnitřní smyčkou, pak break if (swapped == false) break; } } // Funkce pro tisk statického pole void printArray(int[] arr, int size) { int i; pro (i = 0; i< size; i++) Console.Write(arr[i] + ' '); Console.WriteLine(); } // Driver method public static void Main() { int[] arr = { 64, 34, 25, 12, 22, 11, 90 }; int n = arr.Length; bubbleSort(arr, n); Console.WriteLine('Sorted array:'); printArray(arr, n); } } // This code is contributed by Sam007> Javascript // Optimized javaScript implementation // of Bubble sort // An optimized version of Bubble Sort function bubbleSort(arr, n) { var i, j, temp; var swapped; for (i = 0; i < n - 1; i++) { swapped = false; for (j = 0; j < n - i - 1; j++) { if (arr[j]>arr[j + 1]) { // Zaměnit arr[j] a arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = teplota; zaměněno = pravda; } } // POKUD žádné dva prvky nebyly // prohozeny vnitřní smyčkou, pak break if (swapped == false) break; } } // Funkce pro tisk funkce pole printArray(arr, size) { var i; pro (i = 0; i< size; i++) console.log(arr[i] + ' '); } // Driver program var arr = [ 64, 34, 25, 12, 22, 11, 90 ]; var n = arr.length; bubbleSort(arr, n); console.log('Sorted array: '); printArray(arr, n); // This code is contributed shivanisinghss2110> PHP // PHP Optimized implementation // of Bubble sort // An optimized version of Bubble Sort function bubbleSort(&$arr) { $n = sizeof($arr); // Traverse through all array elements for($i = 0; $i < $n; $i++) { $swapped = False; // Last i elements are already // in place for ($j = 0; $j < $n - $i - 1; $j++) { // Traverse the array from 0 to // n-i-1. Swap if the element // found is greater than the // next element if ($arr[$j]>$arr[$j+1]) { $t = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $t; $swapped = Pravda; } } // Pokud nebyly žádné dva prvky prohozeny // vnitřní smyčkou, pak break if ($swapped == False) break; } } // Kód ovladače $arr = array(64, 34, 25, 12, 22, 11, 90); $len = sizeof($arr); bubbleSort($arr); echo 'Seřazené pole:
'; for($i = 0; $i< $len; $i++) echo $arr[$i].' '; // This code is contributed by ChitraNayal. ?>> Výstup
Sorted array: 11 12 22 25 34 64 90>
Analýza složitosti bublinového třídění :
Časová náročnost: NA2)
Pomocný prostor: O(1)
Výhody bublinkového třídění:
- Bublinové třídění je snadné pochopit a implementovat.
- Nevyžaduje žádný další paměťový prostor.
- Jedná se o stabilní třídicí algoritmus, což znamená, že prvky se stejnou hodnotou klíče si zachovávají relativní pořadí v setříděném výstupu.
Nevýhody bublinkového třídění:
- Bublinové třídění má časovou složitost O(N2), což jej velmi zpomaluje pro velké soubory dat.
- Bublinové třídění je algoritmus třídění založený na porovnání, což znamená, že k určení relativního pořadí prvků ve vstupní sadě dat vyžaduje operátor porovnání. V určitých případech může omezit účinnost algoritmu.
Některé časté dotazy týkající se bublinového třídění:
Co je to Boundary Case for Bubble sort?
Bublinové řazení zabere minimální dobu (Řád n), když jsou prvky již seřazeny. Proto je nejlepší předem zkontrolovat, zda je pole již seřazeno nebo ne, abyste se vyhnuli O(N2) časová náročnost.
Probíhá třídění v Bubble sort?
Ano, Bubble sort provádí záměnu sousedních párů bez použití nějaké větší datové struktury. Algoritmus Bubble sort je tedy algoritmem na místě.
Je algoritmus Bubble sort stabilní?
Ano, algoritmus bublinového řazení je stabilní.
Kde se používá algoritmus Bubble sort?
Bublinové třídění se díky své jednoduchosti často používá k zavedení konceptu třídícího algoritmu. V počítačové grafice je populární pro svou schopnost detekovat drobnou chybu (jako je záměna pouhých dvou prvků) v téměř seřazených polích a opravit ji s pouhou lineární složitostí (2n).
Příklad: Používá se v algoritmu vyplňování polygonu, kde jsou ohraničující čáry tříděny podle jejich souřadnic x na určité linii skenování (čára rovnoběžná s osou x) a se zvyšováním y se mění pouze jejich pořadí (dva prvky jsou prohozeny). na křižovatkách dvou čar.
Související články:
- Rekurzivní bublinové třídění
- Nácvik kódování pro třídění
- Kvíz o bublinovém třídění
- Analýza složitosti bublinového třídění