Boblesortering er den enkleste sorteringsalgoritme som fungerer ved gjentatte ganger å bytte de tilstøtende elementene hvis de er i feil rekkefølge. Denne algoritmen er ikke egnet for store datasett siden dens gjennomsnittlige og verste tidskompleksitet er ganske høy.
Algoritme for boblesortering
Anbefalt praksis Boblesortering Prøv det!I Bubble Sort-algoritmen,
- traverser fra venstre og sammenlign tilstøtende elementer og den høyere er plassert på høyre side.
- På denne måten flyttes det største elementet til den høyre enden først.
- Denne prosessen fortsettes deretter for å finne den nest største og plassere den og så videre til dataene er sortert.
Hvordan fungerer boblesortering?
La oss forstå hvordan boblesortering fungerer ved hjelp av følgende illustrasjon:
ipconfig på Ubuntu
Inndata: arr[] = {6, 0, 3, 5}
Første pass:
Det største elementet plasseres i riktig posisjon, det vil si enden av arrayet.
Algoritme for boblesortering: Plassering av det største elementet i riktig posisjon
Andre pass:
Plasser det nest største elementet i riktig posisjon
Algoritme for boblesortering: Plassering av det nest største elementet i riktig posisjon
Tredje pass:
Plasser de resterende to elementene på riktig plassering.
java generere tilfeldig tallAlgoritme for boblesortering: Plasser de resterende elementene på riktig plassering
- Totalt nr. av pass: n-1
- Totalt nr. av sammenligninger: n*(n-1)/2
Implementering av Bubble Sort
Nedenfor er implementeringen av boblesorteringen. Den kan optimaliseres ved å stoppe algoritmen hvis den indre sløyfen ikke forårsaket noe bytte.
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]); byttet = sant; } } // Hvis ingen to elementer ble byttet // med indre sløyfe, så break if (byttet == usann) break; } } // Funksjon for å skrive ut en matrise void printArray(int arr[], int size) { int i; for (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]); byttet = sant; } } // Hvis ingen to elementer ble byttet av indre sløyfe, // deretter break if (byttet == usann) break; } } // Funksjon for å skrive ut en matrise void printArray(int arr[], int size) { int i; for (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; }> Java // 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]) { // Bytt arr[j] og arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; byttet = sant; } } // Hvis ingen to elementer ble // byttet med indre sløyfe, så break if (byttet == usann) break; } } // Funksjon for å skrive ut en matrise statisk void printArray(int arr[], int size) { int i; for (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] byttet = Sant hvis (byttet == usann): brudd # Driverkode for å teste ovenfor hvis __navn__ == '__main__': arr = [64, 34, 25, 12, 22, 11, 90] bubbleSort(arr) print('Sortert array:') for i in range(len(arr)): print('%d' % arr[i], end=' ') # Denne koden er modifisert av 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]) { // Bytt arr[j] og arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; byttet = sant; } } // Hvis ingen to elementer ble // byttet med indre sløyfe, så break if (byttet == usann) break; } } // Funksjon for å skrive ut en matrise statisk void printArray(int[] arr, int size) { int i; for (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]) { // Bytt arr[j] og arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; byttet = sant; } } // HVIS ingen to elementer ble // byttet med indre løkke, så bryte hvis (byttet == usann) bryte; } } // Funksjon for å skrive ut en matrisefunksjon printArray(arr, size) { var i; for (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 = Sant; } } // Hvis ingen to elementer ble byttet // med indre sløyfe, så break if ($swapped == False) break; } } // Driverkode $arr = array(64, 34, 25, 12, 22, 11, 90); $len = sizeof($arr); bubbleSort($arr); echo 'Sortert array:
'; for($i = 0; $i< $len; $i++) echo $arr[$i].' '; // This code is contributed by ChitraNayal. ?>> Produksjon
Sorted array: 11 12 22 25 34 64 90>
Kompleksitetsanalyse av boblesortering :
Tidskompleksitet: PÅ2)
Hjelpeplass: O(1)
Fordeler med Bubble Sort:
- Boblesortering er lett å forstå og implementere.
- Den krever ikke ekstra minneplass.
- Det er en stabil sorteringsalgoritme, som betyr at elementer med samme nøkkelverdi opprettholder sin relative rekkefølge i den sorterte utgangen.
Ulemper med Bubble Sort:
- Boblesortering har en tidskompleksitet på O(N2) som gjør den veldig treg for store datasett.
- Boblesortering er en sammenligningsbasert sorteringsalgoritme, som betyr at det krever en sammenligningsoperator for å bestemme den relative rekkefølgen til elementene i inndatasettet. Det kan begrense effektiviteten til algoritmen i visse tilfeller.
Noen vanlige spørsmål knyttet til Bubble Sort:
Hva er grensehuset for boblesortering?
Boblesortering tar minimum tid (rekkefølge på n) når elementene allerede er sortert. Derfor er det best å sjekke om matrisen allerede er sortert eller ikke på forhånd, for å unngå O(N2) tidskompleksitet.
Skjer sortering på plass i boblesortering?
Ja, Bubble sort utfører bytte av tilstøtende par uten bruk av noen større datastruktur. Derfor er boblesorteringsalgoritme en algoritme på stedet.
streng til boolsk java
Er boblesorteringsalgoritmen stabil?
Ja, boblesorteringsalgoritmen er stabil.
Hvor brukes boblesorteringsalgoritmen?
På grunn av sin enkelhet blir boblesortering ofte brukt for å introdusere konseptet med en sorteringsalgoritme. I datagrafikk er det populært for sin evne til å oppdage en liten feil (som et bytte av bare to elementer) i nesten-sorterte arrays og fikse det med bare lineær kompleksitet (2n).
Eksempel: Den brukes i en polygonfyllingsalgoritme, der grenselinjer er sortert etter x-koordinatene ved en spesifikk skannelinje (en linje parallelt med x-aksen), og med økende y deres rekkefølgen endres (to elementer byttes) bare i skjæringspunktet mellom to linjer.
Relaterte artikler:
- Rekursiv boblesortering
- Kodingspraksis for sortering
- Quiz om Bubble Sort
- Kompleksitetsanalyse av boblesortering