Bubblesort är det enklaste sorteringsalgoritm som fungerar genom att upprepade gånger byta de intilliggande elementen om de är i fel ordning. Denna algoritm är inte lämplig för stora datamängder eftersom dess genomsnittliga och värsta tidskomplexitet är ganska hög.
Bubbelsorteringsalgoritm
Rekommenderad praxis Bubblesort Prova!I Bubble Sort-algoritmen,
- gå från vänster och jämför intilliggande element och det högre placeras på höger sida.
- På så sätt flyttas det största elementet till den högra änden först.
- Denna process fortsätter sedan för att hitta den näst största och placera den och så vidare tills data är sorterad.
Hur fungerar Bubblesortering?
Låt oss förstå hur bubbelsortering fungerar med hjälp av följande illustration:
Inmatning: arr[] = {6, 0, 3, 5}
Första passet:
Det största elementet placeras i sin korrekta position, d.v.s. slutet av arrayen.
Bubbelsorteringsalgoritm: Placera det största elementet på rätt plats
Andra passet:
Placera det näst största elementet i rätt position
Bubbelsorteringsalgoritm: Placera det näst största elementet på rätt plats
Tredje passet:
Placera de återstående två elementen på deras korrekta positioner.
Bubbelsorteringsalgoritm: Placera de återstående elementen på deras korrekta positioner
- Totalt nr. av pass: n-1
- Totalt nr. av jämförelser: n*(n-1)/2
Implementering av Bubble Sort
Nedan är implementeringen av bubbelsorteringen. Den kan optimeras genom att stoppa algoritmen om den inre slingan inte orsakade något byte.
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]); bytte = sant; } } // Om inga två element byttes ut // med den inre slingan, bryt då om (bytt == false) break; } } // Funktion för att skriva ut en array void printArray(int arr[], int size) { int i; för (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]); bytte = sant; } } // Om inga två element byttes med inre loop, // then break if (swapted == false) break; } } // Funktion för att skriva ut en array void printArray(int arr[], int size) { int i; för (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]) { // Byt arr[j] och arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; bytte = sant; } } // Om inga två element // byttes ut av den inre slingan, bryt då om (bytt == false) break; } } // Funktion för att skriva ut en array statisk void printArray(int arr[], int size) { int i; för (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 = Sant om (bytt == Falskt): bryt # Förarkod för att testa ovan om __namn__ == '__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=' ') # Denna kod är modifierad 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]) { // Byt arr[j] och arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; bytte = sant; } } // Om inga två element // byttes ut av den inre slingan, bryt då om (bytt == false) break; } } // Funktion för att skriva ut en array statisk void printArray(int[] arr, int size) { int i; för (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]) { // Byt arr[j] och arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; bytte = sant; } } // OM inga två element // byttes ut av den inre slingan, bryt sedan om (bytt == falskt) bryt; } } // Funktion för att skriva ut en arrayfunktion printArray(arr, size) { var i; för (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; } } // Om inga två element byttes // med den inre slingan, break if ($swapped == False) break; } } // Drivrutinskod $arr = array(64, 34, 25, 12, 22, 11, 90); $len = sizeof($arr); bubbleSort($arr); echo 'Sorterad array:
'; för($i = 0; $i< $len; $i++) echo $arr[$i].' '; // This code is contributed by ChitraNayal. ?>> Produktion
Sorted array: 11 12 22 25 34 64 90>
Komplexitetsanalys av bubbelsortering :
Tidskomplexitet: PÅ2)
Hjälputrymme: O(1)
Fördelar med Bubble Sort:
- Bubblesort är lätt att förstå och implementera.
- Det kräver inget extra minnesutrymme.
- Det är en stabil sorteringsalgoritm, vilket innebär att element med samma nyckelvärde bibehåller sin relativa ordning i den sorterade utmatningen.
Nackdelar med Bubble Sort:
- Bubblesortering har en tidskomplexitet på O(N2) vilket gör det mycket långsamt för stora datamängder.
- Bubblesortering är en jämförelsebaserad sorteringsalgoritm, vilket innebär att den kräver en jämförelseoperator för att bestämma den relativa ordningen av element i indatauppsättningen. Det kan begränsa effektiviteten av algoritmen i vissa fall.
Några vanliga frågor relaterade till Bubble Sort:
Vad är gränsfallet för Bubblesort?
Bubbelsortering tar minsta tid (ordning på n) när element redan är sorterade. Därför är det bäst att kontrollera om arrayen redan är sorterad eller inte i förväg, för att undvika O(N2) tidskomplexitet.
Finns sortering på plats i Bubblesort?
Ja, Bubble sort utför byte av angränsande par utan användning av någon större datastruktur. Därför är bubbelsorteringsalgoritm en algoritm på plats.
Är Bubblesorteringsalgoritmen stabil?
Ja, bubbelsorteringsalgoritmen är stabil.
Var används Bubblesorteringsalgoritmen?
På grund av sin enkelhet används bubbelsortering ofta för att introducera konceptet med en sorteringsalgoritm. Inom datorgrafik är det populärt för sin förmåga att upptäcka ett litet fel (som ett byte av bara två element) i nästan sorterade arrayer och fixa det med bara linjär komplexitet (2n).
Exempel: Den används i en polygonfyllningsalgoritm, där avgränsande linjer sorteras efter deras x-koordinater vid en specifik skanningslinje (en linje parallell med x-axeln), och med ökande y ändras deras ordning (två element byts) endast vid skärningspunkter mellan två linjer.
Relaterade artiklar:
- Rekursiv bubblesortering
- Kodningsövning för sortering
- Frågesport om Bubble Sort
- Komplexitetsanalys av bubbelsortering