U ovom vodiču naučit ćete kako sortiranje mjehurića djeluje. Također ćete pronaći radne primjere mjehurića u C, C ++, Java i Python.
Razvrstavanje mjehurića algoritam je koji uspoređuje susjedne elemente i zamjenjuje njihove položaje ako nisu u željenom redoslijedu. Poredak može biti uzlazni ili silazni.
Kako sortiranje mjehurića djeluje?
- Polazeći od prvog indeksa, usporedite prvi i drugi element. Ako je prvi element veći od drugog, oni se zamjenjuju.
Sada usporedite drugi i treći element. Zamijenite ih ako nisu u redu.
Gornji postupak traje do zadnjeg elementa. Usporedite susjedne elemente - Isti se postupak odvija i za preostale ponavljanja. Nakon svake iteracije, najveći element među nerazvrstanim elementima stavlja se na kraj.
U svakoj se iteraciji uspoređivanje odvija do zadnjeg nerazvrstanog elementa.
Niz se sortira kada su svi nerazvrstani elementi postavljeni na ispravne položaje. Usporedite susjedne elemente Usporedite susjedne elemente Usporedite susjedne elemente
Algoritam sortiranja mjehurića
bubbleSort (niz) za i rightElement zamijeni leftElement i rightElement kraj bubbleSort
Primjeri Pythona, Java i C / C ++
Python Java C C ++ # Bubble sort in Python def bubbleSort(array): # run loops two times: one for walking throught the array # and the other for comparison for i in range(len(array)): for j in range(0, len(array) - i - 1): # To sort in descending order, change> to array(j + 1): # swap if greater is at the rear position (array(j), array(j + 1)) = (array(j + 1), array(j)) data = (-2, 45, 0, 11, -9) bubbleSort(data) print('Sorted Array in Asc ending Order:') print(data)
// Bubble sort in Java import java.util.Arrays; class BubbleSort ( void bubbleSort(int array()) ( int size = array.length; // run loops two times: one for walking throught the array // and the other for comparison for (int i = 0; i < size - 1; i++) for (int j = 0; j to array(j + 1)) ( // swap if greater is at the rear position int temp = array(j); array(j) = array(j + 1); array(j + 1) = temp; ) ) // driver code public static void main(String args()) ( int() data = ( -2, 45, 0, 11, -9 ); BubbleSort bs = new BubbleSort(); bs.bubbleSort(data); System.out.println("Sorted Array in Ascending Order:"); System.out.println(Arrays.toString(data)); ) )
// Bubble sort in C #include void bubbleSort(int array(), int size) ( // run loops two times: one for walking throught the array // and the other for comparison for (int step = 0; step < size - 1; ++step) ( for (int i = 0; i " to " array(i + 1)) ( // swap if greater is at the rear position int temp = array(i); array(i) = array(i + 1); array(i + 1) = temp; ) ) ) ) // function to print the array void printArray(int array(), int size) ( for (int i = 0; i < size; ++i) ( printf("%d ", array(i)); ) printf(""); ) // driver code int main() ( int data() = (-2, 45, 0, 11, -9); int size = sizeof(data) / sizeof(data(0)); bubbleSort(data, size); printf("Sorted Array in Ascending Order:"); printArray(data, size); )
// Bubble sort in C++ #include using namespace std; void bubbleSort(int array(), int size) ( // run loops two times: one for walking throught the array // and the other for comparison for (int step = 0; step < size - 1; ++step) ( for (int i = 0; i to array(i + 1)) ( // swap if greater is at the rear position int temp = array(i); array(i) = array(i + 1); array(i + 1) = temp; ) ) ) ) // function to print the array void printArray(int array(), int size) ( for (int i = 0; i < size; ++i) ( cout << " " << array(i); ) cout << ""; ) // driver code int main() ( int data() = (-2, 45, 0, 11, -9); int size = sizeof(data) / sizeof(data(0)); bubbleSort(data, size); cout << "Sorted Array in Ascending Order:"; printArray(data, size); )
Optimizirano sortiranje mjehurića
U gornjem kodu napravljene su sve moguće usporedbe, čak i ako je niz već sortiran. Povećava vrijeme izvršenja.
Kôd se može optimizirati uvođenjem zamijenjene dodatne varijable. Nakon svake iteracije, ako tada ne dođe do zamjene, nema potrebe za izvođenjem daljnjih petlji.
U tom se slučaju zamjena varijable postavlja na false. Dakle, možemo spriječiti daljnje ponavljanje.
Algoritam za optimiziranu vrstu mjehurića je
bubbleSort (niz) zamijenjen <- false za i rightElement zamijenjen leftElement i rightElement zamijenjen <- true kraj bubbleSort
Primjeri optimiziranog razvrstavanja mjehurića
Python Java C C + # Optimized bubble sort in python def bubbleSort(array): # Run loops two times: one for walking throught the array # and the other for comparison for i in range(len(array)): # swapped keeps track of swapping swapped = True for j in range(0, len(array) - i - 1): # To sort in descending order, change> to array(j + 1): # Swap if greater is at the rear position (array(j), array(j + 1)) = (array(j + 1), array(j)) swapped = False # If there is not swapping in the last swap, then the array is already sorted. if swapped: break data = (-2, 45, 0, 11, -9) bubbleSort(data) print('Sorted Array in Ascending Order:') print(data)
// Optimized bubble sort in Java import java.util.Arrays; class BubbleSort ( void bubbleSort(int array()) ( int size = array.length; // Run loops two times: one for walking throught the array // and the other for comparison for (int i = 0; i < size - 1; i++) ( // swapped keeps track of swapping boolean swapped = true; for (int j = 0; j to array(j + 1)) ( // Swap if greater is at the rear position int temp = array(j); array(j) = array(j + 1); array(j + 1) = temp; swapped = false; ) ) // If there is not swapping in the last swap, then the array is already sorted. if (swapped == true) break; ) ) // Driver code public static void main(String args()) ( int() data = ( -2, 45, 0, 11, -9 ); BubbleSort bs = new BubbleSort(); bs.bubbleSort(data); System.out.println("Sorted Array in Ascending Order:"); System.out.println(Arrays.toString(data)); ) )
// Optimized bubble sort in C #include void bubbleSort(int arrayay(), int size) ( for (int step = 0; step < size - 1; ++step) ( // Swapped keeps track of swapping int swapped = 0; // Run loops two times: one for walking throught the array // and the other for comparison for (int i = 0; i to arrayay(i + 1)) ( // Swap if greater is at the rear position int temp = arrayay(i); arrayay(i) = arrayay(i + 1); arrayay(i + 1) = temp; swapped = 1; ) ) // If there is not swapping in the last swap, then the array is already sorted. if (swapped == 0) break; ) ) // Function to print an array void printarrayay(int arrayay(), int size) ( for (int i = 0; i < size; ++i) ( printf("%d ", arrayay(i)); ) printf(""); ) // Driver code int main() ( int data() = (-2, 45, 0, 11, -9); int size = sizeof(data) / sizeof(data(0)); bubbleSort(data, size); printf("Sorted Array in Ascending Order:"); printarrayay(data, size); )
// Optimized bubble sort in C++ #include using namespace std; void bubbleSort(int array(), int size) ( for (int step = 0; step < size - 1; ++step) (
// Run loops two times: one for walking throught the array // and the other for comparison int swapped = 0; for (int i = 0; i to array(i + 1)) ( // Swap if greater is at the rear position int temp = array(i); array(i) = array(i + 1); array(i + 1) = temp; swapped = 1; ) ) // If there is not swapping in the last swap, then the array is already sorted. if (swapped == 0) break; ) ) // Function to print an array void printArray(int array(), int size) ( for (int i = 0; i < size; ++i) ( cout << " " << array(i); ) cout << ""; ) // Driver code int main() ( int data() = (-2, 45, 0, 11, -9); int size = sizeof(data) / sizeof(data(0)); bubbleSort(data, size); cout << "Sorted Array in Ascending Order:"; printArray(data, size); )
Složenost
Sortiranje mjehurića jedan je od najjednostavnijih algoritama za sortiranje. U algoritam su implementirane dvije petlje.
Ciklus | Broj usporedbi |
---|---|
1. | (n-1) |
2. | (n-2) |
3. | (n-3) |
… | … |
posljednji | 1 |
Broj usporedbi: (n - 1) + (n - 2) + (n - 3) + … + 1 = n (n - 1) / 2 gotovo jednako n 2
Složenost: O (n 2 )
Također, složenost možemo analizirati jednostavnim promatranjem broja petlji. Postoje 2 petlje pa je složenostn*n = n2
Složenost vremena:
-
Najgori složeni slučaj: Ako želimo sortirati u rastućem redoslijedu, a niz je u silaznom redoslijedu, tada se događa najgori slučaj.
O(n2)
-
Složenost najboljeg slučaja:
O(n)
Ako je niz već sortiran, nema potrebe za sortiranjem. -
Prosječna složenost slučaja: Događa se kada su elementi niza pomiješanim redoslijedom (niti uzlazno niti silazno).
O(n2)
Složenost prostora: Složenost
prostora je O(1)
zato što se za zamjenu koristi dodatna promjenjiva temp.
U optimiziranom algoritmu zamijenjena varijabla dodaje složenost prostora, čineći je O(2)
.
Aplikacije za sortiranje mjehurića
Razvrstavanje mjehurića koristi se u sljedećim slučajevima kada
- složenost koda nije bitna.
- poželjna je kratka šifra.