Bubble Algorytm sortowania za pomocą Python za pomocą przykładowej listy

⚡ Inteligentne podsumowanie

BubblFunkcja e Sort porządkuje elementy listy w kolejności rosnącej poprzez wielokrotne porównywanie sąsiadujących wartości i zamianęping je, gdy lewy element jest większy. To proste sortowanie porównawcze sprawdza się w przypadku małych lub prawie posortowanych zbiorów danych i skutecznie uczy podstawowej logiki sortowania.

  • 🔁 Mechanizm główny: BubblSortowanie polega na porównaniu każdej pary sąsiadujących ze sobą elementów i zamianie ich miejscami, a po każdym przejściu na pozycję końcową umieszczana jest największa nieposortowana wartość.
  • ⚙️ Zoptymalizowana wersja: Zmienna flagowa wykrywa, kiedy przebieg nie dokonuje żadnych zamian, przerywając pętlę przedwcześnie, dzięki czemu już posortowana lista kończy się w jednym skanowaniu.
  • 🐍 Python Realizacja: Dwie zagnieżdżone pętle i tymczasowa zmienna sortują listę, a opis przejścia mapuje każdy wiersz na jego dokładne zachowanie.
  • 📊 Profil złożoności: Złożoność czasowa wynosi O(n²) w najgorszym i przeciętnym przypadku, Ω(n) w najlepszym, przy stałym zapotrzebowaniu na przestrzeń O(1).
  • 🎯 Najlepsze dopasowanie: BubblSortowanie sprawdza się w nauczaniu i w przypadku list prawie posortowanych, ale w przypadku dużych zbiorów danych wypada gorzej w porównaniu z zaawansowanymi algorytmami.

Bubble Algorytm sortowania

Czym są sterowniki Bubble Sortować?

Bubble Sortuj to algorytm sortowania używany do sortowania elementów listy w kolejności rosnącej poprzez porównanie dwóch sąsiednich wartości. Jeśli pierwsza wartość jest wyższa od drugiej, pierwsza wartość zajmuje pozycję drugiej, a druga wartość zajmuje pozycję pierwszej. Jeśli pierwsza wartość jest niższa od drugiej, zamiana nie jest wykonywana.ping skończone.

Proces ten jest powtarzany, aż wszystkie wartości na liście zostaną porównane i w razie potrzeby zamienione. Każda iteracja jest zwykle nazywana passem. Liczba przebiegów w sortowaniu bąbelkowym jest równa liczbie elementów na liście minus jeden.

W tym Bubble Sortowanie Python Tutorial poznasz problem, który rozwiązuje, jego zoptymalizowaną formę, wizualny przewodnik krok po kroku, działający Python programu i jego charakterystyki wydajności.

Wdrażanie Bubble Algorytm sortowania

Podzielimy implementację na trzy (3) kroki, a mianowicie problem, rozwiązanie i algorytm, którego możemy użyć do napisania kodu w dowolnym języku.

Problem

Lista elementów jest podana w kolejności losowej, chcemy ułożyć elementy w sposób uporządkowany.

Rozważ poniższą listę:

[21, 6, 9, 33, 3]

rozwiązanie

Przejrzyj listę, porównując dwa sąsiadujące elementy i zamieniając je miejscamiping je, jeśli pierwsza wartość jest wyższa od drugiej.

Wynik powinien być następujący:

[3, 6, 9, 21, 33]

Algorytm

Algorytm sortowania bąbelkowego działa w następujący sposób:

Krok 1) Pobierz całkowitą liczbę elementów. Pobierz całkowitą liczbę elementów na podanej liście.

Krok 2) Określ liczbę przejść zewnętrznych (n – 1) do wykonania. Ich długość wynosi lista minus jeden.

Krok 3) Wykonaj przejścia wewnętrzne (n – 1) razy dla przejścia zewnętrznego 1. Pobierz wartość pierwszego elementu i porównaj ją z drugą wartością. Jeśli druga wartość jest mniejsza od pierwszej, zamień pozycje.

Krok 4) Powtarzaj kroki 3, aż dojdziesz do ostatniego kroku (n – 1). Pobierz kolejny element z listy, a następnie powtórz proces z kroku 3, aż wszystkie wartości zostaną umieszczone w prawidłowej kolejności rosnącej.

Krok 5) Zwróć wynik po wykonaniu wszystkich przejść. Zwróć wyniki posortowanej listy.

Krok 6) Optymalizacja algorytmu.

Unikaj niepotrzebnych przebiegów wewnętrznych, jeśli lista lub sąsiednie wartości są już posortowane. Przykładowo, jeżeli podana lista zawiera już elementy posortowane rosnąco, to możemy wcześniej przerwać pętlę.

Zoptymalizowana Bubble Algorytm sortowania

Domyślnie algorytm sortowania bąbelkowego w Python porównuje wszystkie elementy na liście niezależnie od tego, czy lista jest już posortowana, czy nie. Jeśli dana lista jest już posortowana, porównywanie wszystkich wartości jest stratą czasu i zasobów.

Optymalizacja sortowania bąbelkowego pomaga nam uniknąć niepotrzebnych iteracji oraz zaoszczędzić czas i zasoby.

Na przykład, jeśli pierwszy i drugi element są już posortowane, nie ma potrzeby iteracji po pozostałych wartościach. Iteracja zostaje zakończona i rozpoczyna się następna, aż do zakończenia procesu, jak pokazano poniżej Bubble Przykład sortowania.

Optymalizacja odbywa się poprzez wykonanie następujących kroków:

Krok 1) Utwórz zmienną flagową, która monitoruje, czy występuje jakakolwiek zamianaping wystąpiło w pętli wewnętrznej.

Krok 2) Jeśli wartości zamieniły się miejscami, przejdź do następnej iteracji.

Krok 3) Jeżeli wartości nie zamieniły się miejscami, zakończ pętlę wewnętrzną i kontynuuj wykonywanie pętli zewnętrznej.

Zoptymalizowane sortowanie bąbelkowe jest bardziej wydajne, ponieważ wykonuje tylko niezbędne kroki i pomija te, które nie są wymagane.

Reprezentacja wizualna

Mając listę pięciu elementów, poniższe obrazy ilustrują, w jaki sposób sortowanie bąbelkowe iteruje po wartościach podczas sortowania.

Poniższy obraz przedstawia nieposortowaną listę:

Bubble Sortuj nieposortowaną listę

Pierwsza iteracja

Krok 1)

Bubble Sortowanie porównujące 21 i 6

Wartości 21 i 6 są porównywane, aby sprawdzić, która z nich jest większa od drugiej.

Bubble Sortuj zamianęping 21 i 6

21 jest większe od 6, więc 21 zajmuje pozycję zajmowaną przez 6, podczas gdy 6 zajmuje pozycję zajmowaną przez 21.

Bubble Sortuj zmodyfikowaną listę po zamianie

Nasza zmodyfikowana lista wygląda teraz jak powyższa.

Krok 2)

Bubble Sortowanie porównujące 21 i 9

Porównuje się wartości 21 i 9.

Bubble Sortuj zamianęping 21 i 9

21 jest większe niż 9, więc zamieniamy miejscami 21 i 9.

Bubble Sortuj nową listę po zamianie

Nowa lista wygląda teraz tak jak powyżej.

Krok 3)

Bubble Sortowanie porównujące 21 i 33

Wartości 21 i 33 są porównywane w celu znalezienia większej.

Bubble Sortuj 33 powyżej 21 bez zamiany

Wartość 33 jest większa niż 21, więc nie ma zamianyping ma miejsce.

Krok 4)

Bubble Sortowanie porównujące 33 i 3

Wartości 33 i 3 są porównywane w celu znalezienia większej.

Bubble Sortuj zamianęping 33 i 3

Wartość 33 jest większa od 3, więc zamieniamy ich miejscami.

Bubble Sortuj posortowaną listę po pierwszej iteracji

Posortowana lista na końcu pierwszej iteracji jest taka sama jak ta powyżej.

Druga iteracja

Nowa lista po drugiej iteracji przedstawia się następująco:

Bubble Sortuj listę po drugiej iteracji

Trzecia iteracja

Nowa lista po trzeciej iteracji przedstawia się następująco:

Bubble Sortuj listę po trzeciej iteracji

Czwarta iteracja

Nowa lista po czwartej iteracji przedstawia się następująco:

Bubble Sortuj w pełni posortowaną listę po czwartej iteracji

Python Przykłady

Poniższy kod pokazuje, jak zaimplementować Bubble Algorytm sortowania w Python.

def bubbleSort(theSeq):
    n = len(theSeq)

    for i in range(n - 1):
        flag = 0

        for j in range(n - 1):
            if theSeq[j] > theSeq[j + 1]:
                tmp = theSeq[j]
                theSeq[j] = theSeq[j + 1]
                theSeq[j + 1] = tmp
                flag = 1

        if flag == 0:
            break

    return theSeq

el = [21, 6, 9, 33, 3]
result = bubbleSort(el)
print(result)

Wykonanie powyższego programu sortowania bąbelkowego w Python daje następujące wyniki:

[3, 6, 9, 21, 33]

Code Wyjaśnienie

Wyjaśnienie dot Python BubblKod programu e Sort jest następujący:

Bubble Sortuj Python wyjaśnienie kodu

TUTAJ,

  1. Definiuje funkcję bubbleSort, która akceptuje parametr theSeq. Kod nic nie wyświetla.
  2. Pobiera długość tablicy i przypisuje wartość zmiennej n. Kod nie zwraca niczego.
  3. Uruchamia pętlę for, która wykonuje algorytm sortowania bąbelkowego (n – 1) razy. To jest pętla zewnętrzna. Kod nie zwraca żadnego wyniku.
  4. Definiuje zmienną flagową, która będzie używana do określenia, czy nastąpiła zamiana. Służy to celom optymalizacyjnym. Kod nie generuje żadnych wyników.
  5. Rozpoczyna wewnętrzną pętlę, która porównuje wszystkie wartości na liście od pierwszej do ostatniej. Kod nie generuje niczego.
  6. Używa instrukcji if do sprawdzenia, czy wartość po lewej stronie jest większa niż wartość po prawej stronie. Kod nic nie wyświetla.
  7. Przypisuje wartość Seq[j] do zmiennej czasowej tmp, jeśli warunek zostanie oceniony jako prawdziwy. Kod nie zwraca niczego.
  8. Wartość Seq[j + 1] jest przypisywana do pozycji Seq[j]. Kod nie zwraca niczego.
  9. Wartość zmiennej tmp jest przypisywana do pozycji theSeq[j + 1]. Kod nie zwraca niczego.
  10. Zmiennej flagi przypisana jest wartość 1, co oznacza, że ​​nastąpiła zamiana. Kod nie generuje żadnych wyników.
  11. Używa instrukcji if, aby sprawdzić, czy wartość zmiennej flag wynosi 0. Kod nie wyprowadza niczego.
  12. Jeśli wartość wynosi 0, wywołujemy instrukcję break, która wychodzi z wewnętrznej pętli.
  13. Zwraca wartość Seq po jej posortowaniu. Kod generuje posortowaną listę.
  14. Definiuje zmienną el, która zawiera listę liczb losowych. Kod nie wyprowadza niczego.
  15. Przypisuje wartość funkcji bubbleSort do wyniku zmiennej.
  16. Drukuje wartość wyniku zmiennej.

Bubblzalety sortowania

Oto niektóre zalety algorytmu sortowania bąbelkowego:

  • Łatwo to zrozumieć.
  • Działa bardzo dobrze, gdy lista jest już posortowana lub prawie posortowana.
  • Nie wymaga dużej pamięci.
  • Łatwo jest napisać kod algorytmu.
  • Wymagania dotyczące miejsca są minimalne w porównaniu do innych algorytmów sortowania.

Bubble sort Wady

Poniżej przedstawiono niektóre wady algorytmu sortowania bąbelkowego:

  • Nie radzi sobie dobrze z sortowaniem dużych list. Zajmuje to zbyt dużo czasu i zasobów.
  • Używa się go głównie w celach akademickich i nie w praktyce.
  • Liczba kroków wymaganych do posortowania listy jest rzędu n2.

Analiza złożoności Bubble Sortuj

Istnieją trzy rodzaje złożoności:

1) Sortuj złożoność

Złożoność sortowania służy do wyrażania czasu wykonania i przestrzeni potrzebnej do posortowania listy. Sortowanie bąbelkowe wykonuje (n – 1) iteracji, aby posortować listę, gdzie n to całkowita liczba elementów na liście.

2) Złożoność czasowa

Złożoność czasowa sortowania bąbelkowego wynosi O(n2).

Złożoności czasowe można podzielić na:

  • Najgorszy przypadek – w tym miejscu podana lista jest uporządkowana malejąco. Algorytm wykonuje maksymalną liczbę wykonań wyrażoną jako [Big-O] O(n2).
  • Najlepszy przypadek – dzieje się tak, gdy podana lista jest już posortowana. Algorytm wykonuje minimalną liczbę wykonań, która jest wyrażona jako [Big-Omega] Ω(n).
  • Przeciętny przypadek – dzieje się tak, gdy lista jest w losowej kolejności. Średnia złożoność jest reprezentowana jako [Big-theta] ⊝(n2).

3) Złożoność kosmiczna

Złożoność przestrzenna mierzy ilość dodatkowej przestrzeni potrzebnej do sortowania listy. Sortowanie bąbelkowe wymaga tylko jednej (1) dodatkowej przestrzeni na zmienną czasową używaną do zamiany.ping wartości. Dlatego ma złożoność przestrzenną O(1).

FAQ

BubblSortowanie e-sort rzadko działa w produkcyjnej sztucznej inteligencji, ale pomaga nauczyć logiki sortowania stojącej za przygotowywaniem danych. Potoki uczenia maszynowego sortują cechy, wyniki i prognozy za pomocą szybszych algorytmów, natomiast sortowanie bąbelkowe wyjaśnia koncepcję porównywania i zamiany dla początkujących.

Tak. Asystenci AI mogą pisać sortowanie bąbelkowe Python, Javalub C++ i dodają optymalizację flag, która zatrzymuje się przedwcześnie na posortowanej liście. Mogą również sugerować szybsze algorytmy, gdy zbiór danych staje się duży.

Nazywa się to sortowaniem bąbelkowym, ponieważ większe wartości stopniowo „przesuwają się” na koniec listy przy każdym przejściu, podobnie jak bąbelki powietrza unoszące się na powierzchnię wody, podczas gdy mniejsze wartości opadają bliżej początku.

BubblSortowanie odbywa się w czasie O(n²), co jest znacznie wolniejsze niż sortowanie szybkie i sortowanie przez scalanie w czasie O(n log n). BubblSortowanie e sprawdza się w przypadku małych zbiorów danych lub przykładów edukacyjnych, natomiast sortowanie szybkie i sortowanie przez scalanie skutecznie radzą sobie z dużymi, rzeczywistymi zbiorami danych.

Podsumuj ten post następująco: