Esittely viidestä suosituimmasta lajittelualgoritmista Python-koodilla

Lajittelualgoritmien monimutkaisuus

Lajittelu on taito, josta jokainen ohjelmistosuunnittelija ja -kehittäjä tarvitsee tietämystä. Ei vain koodaushaastattelujen välittämiseksi, vaan yleisenä ymmärryksenä itse ohjelmoinnista. Eri lajittelualgoritmit ovat täydellinen esimerkki siitä, kuinka algoritmien suunnittelulla voi olla niin voimakas vaikutus ohjelman monimutkaisuuteen, nopeuteen ja tehokkuuteen.

Katsotaanpa tutustumista kuuteen parhaiten lajittelualgoritmiin ja katsotaan, kuinka voimme toteuttaa ne Pythonissa!

Kuplalajittelu

Kuplalajittelu on yleensä CS: n johdanto-luokissa opetettava, koska se osoittaa selvästi kuinka lajittelu toimii samalla kun se on yksinkertainen ja helppo ymmärtää. Kuplalajitteluvaiheet luettelon läpi ja vertaa vierekkäisiä elementtipareja. Elementit vaihdetaan, jos ne ovat väärässä järjestyksessä. Luettelon lajittelemattoman osan läpi kulkeminen toistetaan, kunnes luettelo on lajiteltu. Koska Bubble-lajittelu kulkee toistuvasti luettelon lajittelemattoman osan läpi, sen pahimman tapauksen monimutkaisuus on O (n²).

Valinta Lajittele

Valintalajittelu on myös melko yksinkertainen, mutta usein parempi kuin kuplalajittelu. Jos valitset näiden kahden välillä, on parasta vain oletusoikeus valintalajiin. Valintalajittelulla jaamme syöttöluettelomme / ryhmämme kahteen osaan: jo lajiteltujen kohteiden alaluettelo ja lajiteltavien kohteiden alaluettelo, jotka muodostavat muun luettelon. Löydämme ensin lajittelemattoman alaluettelon pienimmän elementin ja sijoitamme sen lajitellun alaluettelon loppuun. Niinpä tartumme jatkuvasti pienimpaan lajittelemattomaan elementtiin ja asetamme se lajiteltuun järjestykseen lajiteltuun alaluetteloon. Tämä prosessi jatkuu toistuvasti, kunnes luettelo on täysin lajiteltu.

Lisäyslajittelu

Lisäyslajittelu on sekä nopeampi että hyvin väitetysti yksinkertaisempi kuin sekä kuplalajittelu että valintalaji. Hauska, se kuinka moni ihminen lajittelee korttinsa pelatessaan korttipeliä! Jokaisessa silmukkakertauksessa lisäyslajittelu poistaa yhden elementin taulukosta. Sitten se löytää sijainnin, jossa tämä elementti kuuluu toiseen lajiteltuun ryhmään, ja lisää sen sinne. Se toistaa tämän prosessin, kunnes mitään syöttöelementtejä ei ole jäljellä.

Yhdistä lajittelu

Yhdistäminen on täysin tyylikäs esimerkki Divide and Conquer -algoritmista. Se yksinkertaisesti käyttää tällaisen algoritmin 2 päävaihetta:

(1) Jaa jatkuvasti lajittelematonta luetteloa, kunnes sinulla on N alalistaa, joissa jokaisessa alaluettelossa on yksi "lajittelematon" elementti ja N on alkuperäisessä taulukossa olevien elementtien lukumäärä.

(2) Yhdistä toistuvasti, eli valloita alalistat 2 yhdessä kerrallaan uusien lajiteltujen alaluetteloiden tuottamiseksi, kunnes kaikki elementit on sulautettu kokonaan yhteen lajiteltuun taulukkoon.

Pikalajittelu

Pikalajittelu on myös jakamis- ja valloitusalgoritmi, kuten yhdistämislajittelu. Vaikka se onkin hieman monimutkaisempi, se suorittaa useimmissa tavanomaisissa toteutuksissa huomattavasti nopeammin kuin yhdistämislajittelu ja saavuttaa harvoin pahimman tapauksen monimutkaisuuden O (n²). Sillä on 3 päävaihetta:

(1) Valitaan ensin elementti, jonka kutsumme kääntöpuoleksi taulukosta.

(2) Siirrä kaikki kääntöpistettä pienemmät elementit kääntöpuolen vasemmalle puolelle; siirrä kaikki nivelää suuremmat elementit nivelten oikealle puolelle. Tätä kutsutaan osiointioperaatioksi.

(3) Levitä rekursiivisesti edellä mainitut 2 vaihetta erikseen jokaiselle alaryhmälle elementtejä, joiden arvot ovat pienempiä ja suurempia kuin viimeisellä niveltavalla.

Haluatko oppia?

Seuraa minua viserrys, johon postitan kaikki uusimmat ja parhaat AI, tekniikka ja tiede! Ota minuun yhteyttä myös LinkedInissä!

Suositeltava lukeminen

Haluatko tietää enemmän koodauksesta Pythonissa? Python Crash Course -kirja on paras tapa lähteä oppimaan kuinka koodata Python!

Ja vain pään ylöspäin, tuen tätä blogia Amazon-tytäryhtiö-linkkeillä loistaviin kirjoihin, koska loistavien kirjojen jakaminen auttaa kaikkia! Amazon-osakkaana ansaitsen kelpoisista ostoista.