Hvordan sortere en liste med heltall

Hvordan sortere en liste med heltall


Sortere en liste er en viktig programvare drift. Å finne noe i en usortert liste betyr i gjennomsnitt går halvveis gjennom listen. Finne noe i en sortert liste tar, på det meste, logaritmen basis to av lengden av listen. For eksempel kan du forvente å se på 500.000 ting å finne det du vil ha i en usortert liste over en million ting. Hvis de ble sortert du kan forvente å se på om 20 ting.

The Order of en Sort

Effektiviteten av algoritmer - inkludert sortering algoritmer - ofte uttrykt i "Big O-notasjon." Dette er skrevet O (N ^ 2) og uttales "orden N kvadrat." Notasjonen beskriver hva som skjer når "size" av problemet vokser. Hvis det er O (N ^ 2), så tiden vokser som kvadratet av størrelsen - hvor mange ting som skal sorteres. Hvis det tar tre sekunder å sortere en million elementer, vil det ta 12 sekunder å sortere to millioner gjenstander. Størrelsen doblet og tiden tar 2 ^ 2 = 4 ganger så lang.

En enkel Sorter

En veldig enkel, lett å programmere slags ville kreve en annen tom liste med samme størrelse som en liste av heltall du vil sortere. Gå gjennom rekke heltall gang, på jakt etter den minste heltall. Når du finner den, merke den som "tatt" og sette den inn i begynnelsen av den tomme listen. Gjøre dette igjen, finne den minste untaken heltall og setter den i neste tilgjengelige sporet i den sorterte listen. Gjenta dette siste trinnet før alt er merket som tas. Denne sortering algoritmen er O (N ^ 2), og egner seg bare for små lister. Det "virker ikke skalere opp godt" så er uoverkommelig treg for store lister.

The Ripple Sorter

Rippel sort eller boblesortering er oppkalt etter den måten elementene bo i den samme listen som samtidig er sortert. Det er en stor favoritt med programmerere fordi det sparer plass og er ekstremt lett å skrive og feilsøke. I verste fall er det O (N ^ 2), men i beste fall er det O (N). I gjennomsnitt tilfellet er det O (NlogN), som er omtrent like bra som det blir. Gå gjennom listen ser på par av heltall, og bytt dem hvis de er ute av drift. Hold gjør dette til listen er sortert.

Mer avanserte Sorterer

Det finnes en rekke former - som merge sort og rask sort - som arbeider i O (NlogN) tid, men de er vanskelig å skrive og utfører ofte verre enn boblesortering på korte lister. Disse algoritmene bør kun vurderes når enorme listene er ofte sortert. Hvis du kan bruke informasjonen om data for å hjelpe til med den typen, er det noen ganger mulig å få ordren ned til O (N), men det er den absolutte teoretiske grensen. Generelt sett er menneskelig tid mer verdifull enn datamaskinen tid og det er en god idé å holde koden så enkel som mulig.