insertion sort c with examples
Dubinski pogled na sortiranje umetanja s klasičnim primjerima.
Razvrstavanje umetanjem tehnika je razvrstavanja koja se može gledati na način na koji kartamo pri ruci. Način na koji umetnemo bilo koju kartu u špil ili je uklonimo, sortiranje umetanja djeluje na sličan način.
Tehnika algoritma sortiranja umetanjem učinkovitija je od tehnika sortiranja mjehurića i selekcije, ali je manje učinkovita od ostalih tehnika poput brze sortiranja i spajanja.
=> Ovdje pogledajte najbolje tutorijale za C ++.
Što ćete naučiti:
- Pregled
- Opći algoritam
- Pseudokod
- Ilustracija
- Primjer C ++
- Primjer Java
- Analiza složenosti algoritma sortiranja umetanja
- Zaključak
- Preporučena literatura
Pregled
U tehnici sortiranja umetanja započinjemo od drugog elementa i uspoređujemo ga s prvim elementom i postavljamo na odgovarajuće mjesto. Zatim izvodimo ovaj postupak za sljedeće elemente.
Usporedimo svaki element sa svim prethodnim elementima i stavimo ili umetnemo element u njegov odgovarajući položaj. Tehnika sortiranja umetanjem izvedivija je za nizove s manjim brojem elemenata. Također je korisno za sortiranje povezanih popisa.
kako započeti projekt u pomrčini
Povezani popisi imaju pokazivač na sljedeći element (u slučaju pojedinačno povezanog popisa) i pokazivač na prethodni element (u slučaju dvostruko povezanog popisa). Stoga postaje lakše implementirati sortiranje umetanja za povezani popis.
Istražimo sve o sortiranju umetanja u ovom vodiču.
Opći algoritam
Korak 1 : Ponovite korake 2 do 5 za K = 1 do N-1
Korak 2 : postavi temp = A (K)
3. korak : skup J = K - 1
4. korak : Ponovite dok je temp<=A(J)
skup A (J + 1) = A (J)
skup J = J - 1
(kraj unutarnje petlje)
Korak 5 : postavite A (J + 1) = temp
(kraj petlje)
Korak 6 : Izlaz
Dakle, u tehnici sortiranja umetanja započinjemo od drugog elementa jer pretpostavljamo da je prvi element uvijek sortiran. Zatim od drugog elementa do posljednjeg elementa uspoređujemo svaki element sa svim prethodnim elementima i taj element stavljamo u odgovarajući položaj.
Pseudokod
Pseudo kod za sortiranje umetanja dan je u nastavku.
procedure insertionSort(array,N ) array – array to be sorted N- number of elements begin int freePosition int insert_val for i = 1 to N -1 do: insert_val = array(i) freePosition = i //locate free position to insert the element whilefreePosition> 0 and array(freePosition -1) >insert_val do: array (freePosition) = array (freePosition -1) freePosition = freePosition -1 end while //insert the number at free position array (freePosition) = insert_val end for end procedure
Gore navedeni pseudo kod za sortiranje umetanja, sljedeće ćemo ilustrirati ovu tehniku u sljedećem primjeru.
Ilustracija
Niz za sortiranje je sljedeći:
Sada za svaki prolaz uspoređujemo trenutni element sa svim prethodnim elementima. Dakle, u prvom dodavanju započinjemo s drugim elementom.
Stoga nam je potreban N broj prolaza za potpuno sortiranje niza koji sadrži N broj elemenata.
Gornja ilustracija može se sažeti u tabličnom obliku:
Proći | Nesortirani popis | usporedba | Poredani popis |
---|---|---|---|
jedan | {12,3,5,10,8,1} | {12,3} | {3,12,5,10,8,1} |
dva | {3,12,5,10,8,1} | {3,12,5} | {3,5,12,10,8,1} |
3 | {3,5,12,10,8,1} | {3,5,12,10} | {3,5,10,12,8,1} |
4 | {3,5,10,12,8,1} | {3,5,10,12,8} | {3,5,8,10,12,1} |
5 | {3,5,8,10,12,1} | {3,5,8,10,12,1} | {1,3,5,8,10,12} |
6 | {} | {} | {1,3,5,8,10,12} |
Kao što je prikazano na gornjoj ilustraciji, započinjemo s 2ndelement jer pretpostavljamo da se prvi element uvijek razvrstava. Dakle, započinjemo s usporedbom drugog elementa s prvim i zamijenimo položaj ako je drugi element manji od prvog.
Ovaj postupak usporedbe i zamjene postavlja dva elementa na njihova odgovarajuća mjesta. Zatim uspoređujemo treći element s prethodnim (prvim i drugim) elementima i izvodimo isti postupak da treći element postavimo na odgovarajuće mjesto.
Na taj način, za svaki prolaz, postavljamo jedan element na njegovo mjesto. Za prvo dodavanje postavljamo drugi element na njegovo mjesto. Stoga općenito, da bismo postavili N elemenata na njihovo odgovarajuće mjesto, trebaju nam N-1 prolazi.
Dalje, demonstrirat ćemo primjenu tehnike sortiranja umetanja u jeziku C ++.
Primjer C ++
#include using namespace std; int main () { int myarray(10) = { 12,4,3,1,15,45,33,21,10,2}; cout<<'
Input list is
'; for(int i=0;i<10;i++) { cout < Izlaz:
Popis unosa je
besplatni program za preuzimanje YouTube videa
12 4 3 1 15 45 33 21 10 2
Sortirani popis je
1 2 3 4 10 12 15 21 33 45
Dalje ćemo vidjeti Java implementaciju tehnike sortiranja Insertion.
Primjer Java
public class Main { public static void main(String() args) { int() myarray = {12,4,3,1,15,45,33,21,10,2}; System.out.println('Input list of elements ...'); for(int i=0;i<10;i++) { System.out.print(myarray(i) + ' '); } for(int k=1; k=0 && temp <= myarray(j)) { myarray(j+1) = myarray(j); j = j-1; } myarray(j+1) = temp; } System.out.println('
sorted list of elements ...'); for(int i=0;i<10;i++) { System.out.print(myarray(i) + ' '); } } }
Izlaz:
Popis ulaznih elemenata ...
12 4 3 1 15 45 33 21 10 2
sortirani popis elemenata ...
1 2 3 4 10 12 15 21 33 45
U obje implementacije možemo vidjeti da započinjemo sortiranje od 2ndelement niza (varijabla petlje j = 1) i opetovano uspoređujte trenutni element sa svim prethodnim elementima, a zatim sortirajte element tako da ga postavi u točan položaj ako trenutni element nije u redu sa svim prethodnim elementima.
Razvrstavanje umetanja najbolje funkcionira i može se dovršiti za manje prolaza ako je niz djelomično sortiran. No kako popis raste, njegove performanse opadaju. Još jedna prednost sortiranja umetanjem je ta što je stabilna sorta što znači da održava redoslijed jednakih elemenata na popisu.
Analiza složenosti algoritma sortiranja umetanja
Iz pseudo koda i gornje ilustracije sortiranje umetanja učinkovit je algoritam u usporedbi s sortiranjem mjehurića ili odabirom. Umjesto da koristi for petlju i sadašnje uvjete, koristi while petlju koja ne izvršava više dodatnih koraka kada se niz sortira.
Međutim, čak i ako sortirani niz proslijedimo tehnici sortiranja Insertion, on će i dalje izvršavati vanjsku petlju for, zahtijevajući tako n broj koraka za sortiranje već sortirane matrice. To čini najbolju vremensku složenost umetanja sortiranjem linearnom funkcijom N gdje je N broj elemenata u polju.
Stoga su različite složenosti tehnike sortiranja umetanjem dane u nastavku:
Najgora vremenska složenost O (n 2) Najbolja vremenska složenost Na) Prosječna vremenska složenost O (n 2) Složenost prostora O (1)
Unatoč tim složenostima, još uvijek možemo zaključiti da je umetanje sortiranja najučinkovitiji algoritam u usporedbi s drugim tehnikama sortiranja poput Bubble sort i Selection sort.
što double radi u javi
Zaključak
Razvrstavanje umetanja najučinkovitije je od sve tri dosad raspravljane tehnike. Ovdje pretpostavljamo da je prvi element sortiran, a zatim uzastopno uspoređujemo svaki element sa svim prethodnim elementima, a zatim trenutni element postavljamo na njegov ispravan položaj u polju.
U ovom vodiču, dok smo razgovarali o sortiranju umetanja, primijetili smo da uspoređujemo elemente pomoću povećanja od 1, a također su i susjedni. Ova značajka rezultira potrebom za više prolaza za dobivanje razvrstanog popisa.
U našem nadolazećem tutorialu razgovarat ćemo o “Shell sort” što je napredak u odnosu na Selection sort.
U sortiranju ljuske uvodimo varijablu poznatu kao 'prirast' ili 'praznina' pomoću koje dijelimo popis na podspiske koji sadrže nesusjedne elemente koji se 'razdvajaju'. Razvrstavanje ljuske zahtijeva manje prolaza u usporedbi s razvrstavanjem umetanjem, a također je brže.
U našim budućim vodičima naučit ćemo o dvije tehnike sortiranja, 'Quicksort' i 'Mergesort' koje koriste strategiju 'Podijeli i osvoji' za sortiranje popisa podataka.
=> Ovdje pripazite na Vodič za obuku za početnike C ++.
Preporučena literatura
- Razvrstavanje ljuske na C ++ s primjerima
- Sortiranje odabira na C ++ s primjerima
- MongoDB metoda sortiranja () s primjerima
- Unix naredba za sortiranje sa sintaksom, opcijama i primjerima
- Razvrstavanje mjehurića na C ++ s primjerima
- Razvrstavanje hrpe u C ++ s primjerima
- Spoji sortiranje u C ++ s primjerima
- Brzo sortiranje u C ++ s primjerima