Razvrstavanje umetanjem tehnika je koja funkcionira tako da koristi razvrstani podpopis i neprestano mu dodaje vrijednost s nerazvrstanog popisa dok se cijeli popis ne sortira.
Algoritam počinje s prvom stavkom popisa kao razvrstanom potpopisom. Zatim uspoređuje sljedeći broj s prvim. Ako je veća, umetnuta je u prvi indeks. Inače, ostaje u indeksu.
Treća vrijednost se zatim uspoređuje s ostale dvije, a zatim se ubacuje u ispravan indeks. Ovaj proces traje sve dok se cijeli popis ne sortira.
Bliži pogled na sortiranje umetanja
Gore navedeni opis vam možda nije imao smisla. Primjer bi vam trebao pomoći da bolje razumijete.
Pretpostavimo da imate popis: [39, 6, 2, 51, 30, 42, 7].
Algoritam identificira 39 kao prvu vrijednost razvrstanog podlista. Evaluacija zatim prelazi na drugu poziciju.
Povezano: Dinamičko programiranje: primjeri, uobičajeni problemi i rješenja
6 se zatim uspoređuje s 39. Budući da je 6 manje od 39, 6 je umetnuto u prvo mjesto, a 39 u drugo. Novi redoslijed popisa je nakon prvog prolaska:
[6, 39, 2, 51, 30, 42, 7]
Evaluacija se sada prebacuje na treće mjesto. 2 se uspoređuje s posljednja dva broja i zatim umetne u desni položaj. Novi redoslijed popisa je nakon drugog prolaska:
[2, 6, 39, 51, 30, 42, 7]
Za treći prolaz redoslijed popisa je:
[2, 6, 39, 51, 30, 42, 7]
Postupak se ponavlja sve dok se cijeli popis ne sortira.
Pogledajte donji dijagram koji sažima ove operacije:
Analiza algoritama
Vremenska složenost sortiranja umetanja je O (n2), baš kao sortiranje mjehurića . Broj usporedbi u najgorem slučaju je zbroj svih cijelih brojeva od 1 do (n-1), dajući kvadratni zbroj.
Implementacija koda
Python i Java kôd u nastavku prikazuje kako možete implementirati metodu Insertion Sort.
Piton:
def insertionSort(mylist):
for step in range(1, len(mylist)):
current_element = mylist[step]
position = step
while position > 0 and mylist[position - 1] > current_element:
mylist[position] = mylist[position - 1]
position = position - 1
mylist[position] = current_element
Java:
void insertionSort(int[] myarray) {
int n = myarray.length;
for (int x = 1; x int key = myarray[x];
int y = x-1;
while ( (y > -1) && ( myarray [y] > key ) ) {
myarray [y+1] = myarray [y];
y--;
}
myarray[y+1] = key;
}
}
Bolje kodiranje s pseudokodom
Gore navedeni primjeri koda dati su bez ikakvog pseudokoda na koji se možete pozvati da napišete ovaj algoritam na drugim jezicima. Većina programera (uključujući autora) voli trčati za svojim tipkovnicama nakon što im se 'šapuće' o načinu rada programa.
Ovaj pristup je nažalost sklon pogreškama jer se programska logika komplicira. Kako želite poboljšati svoju programsku igru naučivši koristiti pseudokod?
Udio Udio Cvrkut E -pošta Što je pseudokod i kako vas čini boljim programerom?Mučite se naučiti programirati? Uhvatite se u koštac s kodom učeći pseudokod. No, što je pseudokod i može li zaista pomoći?
Pročitajte Dalje Povezane teme- Programiranje
- Java
- Piton
- Vodiči za kodiranje
Jerome je osobni pisac na MakeUseOfu. On pokriva članke o programiranju i Linuxu. On je također entuzijast za kripto i uvijek prati kripto industriju.
kako ograničiti brzinu preuzimanja pareViše od Jeromea Davidsona
Pretplatite se na naše obavijesti
Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!
Kliknite ovdje za pretplatu