Бульбашкове сортування є найпростішим алгоритм сортування який працює шляхом багаторазової заміни суміжних елементів, якщо вони розташовані в неправильному порядку. Цей алгоритм не підходить для великих наборів даних, оскільки його середня та найгірша часова складність досить висока.
charat java
Алгоритм бульбашкового сортування
Рекомендована практика Сортування бульбашок Спробуйте!В алгоритмі бульбашкового сортування
- перейдіть зліва та порівняйте сусідні елементи, а вищий розміщено праворуч.
- Таким чином, найбільший елемент спочатку переміщується в крайній правий кінець.
- Потім цей процес продовжується, щоб знайти другий за величиною та розмістити його і так далі, доки дані не будуть відсортовані.
Як працює бульбашкове сортування?
Давайте зрозуміємо роботу бульбашкового сортування за допомогою наступної ілюстрації:
введення: arr[] = {6, 0, 3, 5}
Перший прохід:
Найбільший елемент розміщується в правильному положенні, тобто в кінці масиву.
Алгоритм бульбашкового сортування: розміщення найбільшого елемента в правильному положенні
Другий прохід:
Розмістіть другий за величиною елемент у правильному положенні
Алгоритм бульбашкового сортування: розміщення другого за величиною елемента в правильному місці
Третій прохід:
Розташуйте решту двох елементів у правильному місці.
картографування в машинописіАлгоритм бульбашкового сортування: розміщення решти елементів у правильному місці
- Загальна кількість пропусків: n-1
- Загальна кількість порівнянь: n*(n-1)/2
Реалізація Bubble Sort
Нижче наведено реалізацію бульбашкового сортування. Його можна оптимізувати, зупинивши алгоритм, якщо внутрішній цикл не спричинив жодного обміну.
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]); поміняно = правда; } } // Якщо жодні два елементи не були поміняні місцями // за допомогою внутрішнього циклу, тоді розрив if (swapped == false) break; } } // Функція друку масиву void printArray(int arr[], int size) { int i; для (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]); поміняно = правда; } } // Якщо жодні два елементи не були поміняні місцями у внутрішньому циклі, // тоді переривається if (swapped == false) break; } } // Функція друку масиву void printArray(int arr[], int size) { int i; для (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]) { // Поміняти місцями arr[j] і arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = темп; поміняно = правда; } } // Якщо жоден з двох елементів // не було поміняно місцями у внутрішньому циклі, тоді розрив if (swapped == false) break; } } // Функція друку масиву static void printArray(int arr[], int size) { int i; для (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] поміняно = True if (поміняно == False): break # Код драйвера для перевірки вище if __name__ == '__main__': arr = [64, 34, 25, 12, 22, 11, 90] bubbleSort(arr) print('Відсортований масив:') для i в діапазоні (len(arr)): print('%d' % arr[i], end=' ') # Цей код змінено Сураджем крушною Ядавом>>>C# 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]) { // Поміняти місцями arr[j] і arr[j+1] temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = темп; поміняно = правда; } } // ЯКЩО жодних двох елементів не було // поміняно місцями у внутрішньому циклі, тоді розрив if (swapped == false) break; } } // Функція друку масиву function printArray(arr, size) { var i; для (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 = True; } } // Якщо жодні два елементи не були поміняні місцями // у внутрішньому циклі, тоді розрив if ($swapped == False) break; } } // Код драйвера $arr = array(64, 34, 25, 12, 22, 11, 90); $len = sizeof($arr); bubbleSort($arr); echo 'Відсортований масив:
'; for($i = 0; $i< $len; $i++) echo $arr[$i].' '; // This code is contributed by ChitraNayal. ?>> Вихід
Sorted array: 11 12 22 25 34 64 90>
Аналіз складності бульбашкового сортування :
Часова складність: O(N2)
Допоміжний простір: О(1)
Переваги Bubble Sort:
- Бульбашкове сортування легко зрозуміти та реалізувати.
- Він не вимагає додаткового місця в пам'яті.
- Це стабільний алгоритм сортування, тобто елементи з однаковим значенням ключа зберігають свій відносний порядок у відсортованому виведенні.
Недоліки Bubble Sort:
- Сортування бульбашок має часову складність O(N2), що робить його дуже повільним для великих наборів даних.
- Бульбашкове сортування — це алгоритм сортування на основі порівняння, що означає, що для визначення відносного порядку елементів у наборі вхідних даних потрібен оператор порівняння. У деяких випадках це може обмежити ефективність алгоритму.
Деякі поширені запитання щодо бульбашкового сортування:
Що таке граничний випадок для бульбашкового сортування?
Бульбашкове сортування займає мінімум часу (порядку n), коли елементи вже відсортовано. Тому найкраще заздалегідь перевірити, чи масив уже відсортований чи ні, щоб уникнути O(N2) часова складність.
Чи відбувається сортування на місці в бульбашковому сортуванні?
Так, бульбашкове сортування виконує заміну суміжних пар без використання будь-якої основної структури даних. Отже, алгоритм бульбашкового сортування є алгоритмом на місці.
Чи стабільний алгоритм бульбашкового сортування?
Так, алгоритм бульбашкового сортування стабільний.
java аналізує рядок до int
Де використовується алгоритм бульбашкового сортування?
Через свою простоту бульбашкове сортування часто використовується для введення поняття алгоритму сортування. У комп’ютерній графіці він популярний завдяки своїй здатності виявляти крихітну помилку (наприклад, заміну лише двох елементів) у майже відсортованих масивах і виправляти її лише з лінійною складністю (2n).
Приклад: він використовується в алгоритмі заповнення багатокутником, де обмежувальні лінії сортуються за координатою x на певній лінії сканування (лінії, паралельній осі x), а зі збільшенням y їх порядок змінюється (два елементи міняються місцями) лише на перетині двох ліній.
Пов'язані статті:
- Рекурсивне бульбашкове сортування
- Практика кодування для сортування
- Тест на сортування бульбашок
- Аналіз складності бульбашкового сортування