Bubble Sort on yksinkertainen lajittelualgoritmi, joka liikkuu toistuvasti luettelon läpi, vertaa vierekkäisiä elementtejä ja vaihtaa ne, jos ne ovat väärässä järjestyksessä. Se on nimeltään 'Bubble Sort', koska pienemmät elementit 'kuplaavat' luettelon alkuun. Vaikka se ei ole tehokkain lajittelualgoritmi, se on helppo ymmärtää ja toteuttaa, joten se on hyvä lähtökohta lajittelualgoritmien oppimiselle. Tässä artikkelissa perehdymme Bubble Sort -konseptiin, tarjoamme Python-toteutuksen tulosteineen ja keskustelemme algoritmin aikamonimutkaisuudesta.
Kuplalajittelun ymmärtäminen
Bubble Sort -toiminnon perusideana on selata luetteloa useita kertoja, vertailla vierekkäisiä elementtejä ja vaihtaa niitä, jos ne ovat epäkunnossa. Prosessi jatkuu, kunnes vaihtoja ei enää tarvita, mikä osoittaa, että luettelo on nyt lajiteltu. Algoritmi on saanut nimensä tavasta, jolla pienemmät elementit siirtyvät vähitellen luettelon kärkeen, aivan kuten kuplat nousevat pintaan.
Puretaan kuplalajittelualgoritmin vaiheet:
- Toista luetteloa: Aloita luettelon alusta ja vertaa jokaista vierekkäisten elementtien paria.
- Vertaa ja vaihda: Jos elementit ovat väärässä järjestyksessä, vaihda ne. Tämä varmistaa, että suurempi elementti 'kuplii ylös' ja pienempi liikkuu alas.
- Jatka iterointia: Toista prosessi jokaiselle vierekkäiselle elementille, kunnes luettelon loppu on saavutettu.
- Toista, kunnes se on lajiteltu: Jatka luettelon iterointia, kunnes vaihtoja ei enää tarvita. Tässä vaiheessa luettelo on lajiteltu.
Vaikka Bubble Sort on yksinkertaista ymmärtää, se ei ole tehokkain lajittelualgoritmi, etenkään suurille tietojoukoille. Sen aikamonimutkaisuus on pahimmassa tapauksessa O(n^2), missä 'n' on listan elementtien lukumäärä. Tämä neliöllinen aika monimutkaisuus tekee siitä vähemmän sopivan suurille tietojoukoille verrattuna kehittyneempiin lajittelualgoritmeihin.
Bubble Sort -sovelluksen Python-toteutus
Otetaan nyt käyttöön Bubble Sort Pythonissa ja tarkkaillaan sen toimintaa esimerkkiluettelolla:
def bubble_sort(arr): n = len(arr) # Traverse through all array elements for i in range(n): # Last i elements are already sorted, so we don't need to check them for j in range(0, 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] # Example usage if __name__ == '__main__': # Sample list to be sorted sample_list = [64, 34, 25, 12, 22, 11, 90] # Display the original list print('Original List:', sample_list) # Apply Bubble Sort bubble_sort(sample_list) # Display the sorted list print('Sorted List:', sample_list)
Tässä toteutuksessa bubble_sort-funktio ottaa listan (arr) parametrikseen ja lajittelee sen paikoilleen. Sisäkkäinen silmukka vertaa vierekkäisiä elementtejä ja vaihtaa ne, jos ne ovat väärässä järjestyksessä. Ulompi silmukka varmistaa, että prosessi toistetaan, kunnes koko luettelo on lajiteltu.
Tulos ja selitys
Suoritetaan toimitettu Python-koodi esimerkkiluettelon kanssa ja tarkkaillaan tulosta:
Original List: [64, 34, 25, 12, 22, 11, 90] Sorted List: [11, 12, 22, 25, 34, 64, 90]
Tässä alkuperäinen luettelo [64, 34, 25, 12, 22, 11, 90] lajitellaan onnistuneesti käyttämällä Bubble Sort -algoritmia, jolloin tuloksena on lajiteltu luettelo [11, 12, 22, 25, 34, 64, 90].
Algoritmi iteroi luettelon läpi useita kertoja vertaamalla ja vaihtaen elementtejä, kunnes koko luettelo on lajiteltu. Jokaisella siirrolla suurin lajittelematon elementti 'kuplii' oikeaan paikkaansa. Tämä prosessi jatkuu, kunnes vaihtoja ei enää tarvita, mikä osoittaa, että luettelo on täysin lajiteltu.
Vaikka Bubble Sort lajittelee luettelon onnistuneesti, on tärkeää huomata, että sen aika monimutkaisuus tekee siitä vähemmän tehokkaan suurille tietojoukoille verrattuna muihin lajittelualgoritmeihin, kuten yhdistämislajittelu tai pikalajittelu.
Kuplalajittelun aika monimutkaisuus
Algoritmin ajallisen monimutkaisuuden ymmärtäminen on ratkaisevan tärkeää sen tehokkuuden arvioinnissa, etenkin kun käsitellään suuria tietojoukkoja. Kuplalajittelun aikamonimutkaisuus on O(n^2) pahimmassa tapauksessa, missä 'n' on listan elementtien lukumäärä.
Puretaan aika monimutkaisuusanalyysi:
- Ulompi silmukka suorittaa 'n' iteraatioita, missä 'n' on luettelon elementtien lukumäärä.
- Sisäsilmukka toimii myös 'n' iteraatioille pahimmassa tapauksessa. Algoritmin edetessä iteraatioiden määrä sisäsilmukassa kuitenkin pienenee, kun suurin lajittelematon elementti sijoittuu oikeaan paikkaansa jokaisessa ajossa.
- Pahimmassa tapauksessa vertailujen ja vaihtojen määrä on verrannollinen listan elementtien lukumäärän neliöön, mikä johtaa O(n^2)-ajan monimutkaisuuteen. Tämä tekee Bubble Sortista tehottomaksi suurille tietojoukoille, ja kehittyneempiä lajittelualgoritmeja, joilla on parempi aikamonimutkaisuus, suositaan usein tosielämän sovelluksissa.
Johtopäätös
Tässä artikkelissa tutkimme Bubble Sort -konseptia, yksinkertaista lajittelualgoritmia, joka vertaa ja vaihtaa toistuvasti vierekkäisiä elementtejä, kunnes koko luettelo on lajiteltu. Toimitimme Bubble Sort -sovelluksen Python-toteutuksen, suoritimme sen näyteluettelon kanssa ja analysoimme tulosteen. Lisäksi keskustelimme Bubble Sort -toiminnon aikamonimutkaisuudesta, korostaen sen O(n^2) pahimman tapauksen aikamonimutkaisuutta ja sen vaikutuksia tehokkuuteen.