insertion sort c with examples
Poglobljen pogled na sortiranje vstavitve s klasičnimi primeri.
Razvrščanje pri vstavljanju je tehnika razvrščanja, ki si jo lahko ogledamo tako, da igramo karte pri roki. Način, kako vstavimo katero koli kartico v krov ali jo odstranimo, razvrščanje vstavljanja deluje na podoben način.
Tehnika algoritma za razvrščanje vstavljanja je učinkovitejša od tehnik razvrščanja po mehurčkih in izbire, vendar je manj učinkovita od drugih tehnik, kot sta razvrščanje po hitrem vrstnem redu in spajanje.
=> Tukaj si oglejte najboljše vadnice za C ++.
Kaj se boste naučili:
- Pregled
- Splošni algoritem
- Psevkodo
- Ilustracija
- Primer C ++
- Primer Java
- Analiza kompleksnosti algoritma sortiranja vstavitve
- Zaključek
- Priporočeno branje
Pregled
Pri tehniki razvrščanja vstavljanja začnemo pri drugem elementu in ga primerjamo s prvim elementom ter ga postavimo na primerno mesto. Nato izvedemo ta postopek za nadaljnje elemente.
Vsak element primerjamo z vsemi prejšnjimi elementi in ga postavimo ali vstavimo v njegov pravilen položaj. Tehnika sortiranja vstavljanja je izvedljivejša za nize z manjšim številom elementov. Uporaben je tudi za razvrščanje povezanih seznamov.
kako odpreti datoteko a.swf
Povezani seznami imajo kazalec na naslednji element (v primeru enojno povezanega seznama) in kazalec tudi na prejšnji element (v primeru dvojno povezanega seznama). Zato postane lažje izvajati razvrščanje vstavljanja za povezani seznam.
Oglejmo si vse o razvrščanju vstavkov v tej vadnici.
Splošni algoritem
Korak 1 : Ponovite korake 2 do 5 za K = 1 do N-1
2. korak : nastavi temp = A [K]
3. korak : nastavite J = K - 1
4. korak : Ponovite med temp<=A[J]
nastavite A [J + 1] = A [J]
nastavimo J = J - 1
[konec notranje zanke]
5. korak : nastavite A [J + 1] = temp
[konec zanke]
6. korak : izhod
Tako pri tehniki razvrščanja vstavljanja začnemo pri drugem elementu, saj predpostavljamo, da je prvi element vedno razvrščen. Nato od drugega elementa do zadnjega elementa primerjamo vsak element z vsemi prejšnjimi elementi in ga postavimo v ustrezen položaj.
Psevkodo
Psevdo koda za vstavljanje je podana spodaj.
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
Zgoraj je psevdo koda za vstavljanje, nato bomo to tehniko ponazorili v naslednjem primeru.
Vprašanja in odgovori za testiranje avtomatizacije selena za izkušene
Ilustracija
Niz, ki ga je treba razvrstiti, je naslednji:
Zdaj za vsak prehod primerjamo trenutni element z vsemi prejšnjimi elementi. V prvem podajanju torej začnemo z drugim elementom.
Tako potrebujemo N število prehodov za popolno razvrščanje matrike, ki vsebuje N število elementov.
Zgornjo ponazoritev lahko povzamemo v obliki tabele:
Mimo | Nerazvrščen seznam | primerjava | Razvrščen seznam |
---|---|---|---|
1. | {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} |
Kot je prikazano na zgornji sliki, začnemo z 2ndelement, saj predpostavljamo, da je prvi element vedno razvrščen. Začnemo s primerjavo drugega elementa s prvim in položaj zamenjamo, če je drugi element manjši od prvega.
Ta postopek primerjave in zamenjave postavita dva elementa na njihova prava mesta. Nato primerjamo tretji element s prejšnjimi (prvim in drugim) elementom in izvedemo enak postopek, da postavimo tretji element na pravo mesto.
Na ta način za vsak prehod postavimo en element na svoje mesto. Za prvo podajo postavimo drugi element na svoje mesto. Tako na splošno za postavitev N elementov na njihovo pravilno mesto potrebujemo N-1 prehode.
Nato bomo prikazali izvedbo tehnike razvrščanja vstavitve v jeziku C ++.
Primer 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 < Izhod:
Seznam vnosov je
12 4 3 1 15 45 33 21 10 2
Razvrščen seznam je
1 2 3 4 10 12 15 21 33 45
Nato bomo videli implementacijo Java tehnike razvrščanja vstavitve.
Primer 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] + ' '); } } }
Izhod:
Seznam vnosov elementov…
12 4 3 1 15 45 33 21 10 2
kako najti datoteke apk na android -
razvrščen seznam elementov…
1 2 3 4 10 12 15 21 33 45
V obeh izvedbah lahko vidimo, da začnemo z razvrščanjem od 2ndelement matrike (spremenljivka zanke j = 1) in večkrat primerja trenutni element z vsemi njegovimi prejšnjimi elementi in nato razvrsti element, da ga postavi v pravi položaj, če trenutni element ni v redu z vsemi prejšnjimi elementi.
Razvrstitev vstavka deluje najbolje in jo je mogoče dokončati v manj prehodih, če je polje delno razvrščeno. Ko pa se seznam povečuje, se njegova zmogljivost zmanjšuje. Druga prednost razvrščanja pri vstavljanju je, da gre za stabilno razvrščanje, kar pomeni, da vzdržuje vrstni red enakih elementov na seznamu.
Analiza kompleksnosti algoritma sortiranja vstavitve
Iz psevdo kode in zgornje ilustracije je razvrščanje vstavljanja učinkovit algoritem v primerjavi z razvrščanjem z mehurčki ali izbirnim razvrščanjem. Namesto da uporablja for for in trenutne pogoje, uporablja zanko while, ki pri razvrščanju polja ne izvede nobenih dodatnih korakov.
Kljub temu, da bomo sortirano matriko prenesli na tehniko razvrščanja vstavitve, bo še vedno izvedla zunanjo zanko for, s čimer bo zahtevala n število korakov za razvrščanje že razvrščene matrike. To naredi najboljšo časovno zapletenost razvrščanja vstavka linearno funkcijo N, kjer je N število elementov v matriki.
Tako so spodaj podane različne zapletenosti tehnike razvrščanja vstavitve:
Najslabša časovna zapletenost O (n 2) Najboljša časovna zapletenost O (n) Povprečna časovna zapletenost O (n 2) Zapletenost prostora O (1)
Kljub tej zapletenosti lahko še vedno sklepamo, da je razvrščanje vstavljanja najučinkovitejši algoritem v primerjavi z drugimi tehnikami razvrščanja, kot sta razvrščanje po mehurčkih in razvrščanje po izboru.
Zaključek
Razvrstitev vstavkov je najučinkovitejša od vseh treh doslej obravnavanih tehnik. Tu predpostavljamo, da je prvi element razvrščen, nato pa večkrat primerjamo vsak element z vsemi prejšnjimi elementi in nato trenutni element postavimo na njegov pravilen položaj v matriki.
V tej vadnici smo med razpravljanjem o vstavljanju opazili, da elemente primerjamo s korakom 1 in so tudi sosednji. Rezultat te funkcije je, da dobite razvrščeni seznam, potrebujete več prehodov.
V naši prihajajoči vadnici bomo razpravljali o »razvrščanju lupine«, kar je izboljšanje v primerjavi z razvrstitvijo izbora.
Pri razvrščanju lupine uvedemo spremenljivko, znano kot »prirastek« ali »vrzel«, s pomočjo katere seznam razdelimo na podsezname, ki vsebujejo nespremenljive elemente, ki se »vrzeli« ločijo. Razvrščanje lupine zahteva manj prehodov v primerjavi z razvrščanjem vstavitve in je tudi hitrejše.
V naših prihodnjih vajah bomo spoznali dve tehniki razvrščanja, 'Quicksort' in 'Mergesort', ki uporabljata strategijo 'Divide and conquer' za razvrščanje seznamov podatkov.
=> Tukaj bodite pozorni na vodnik za usposabljanje za začetnike C ++.
Priporočeno branje
- Razvrstitev lupine v C ++ z primeri
- Izbirno razvrščanje v C ++ z primeri
- Metoda sortiranja () MongoDB () s primeri
- Ukaz za razvrščanje Unix s sintakso, možnostmi in primeri
- Razvrstitev mehurčkov v jeziku C ++ s primeri
- Razvrstitev kopice v C ++ z primeri
- Združi razvrstitev v jeziku C ++ s primeri
- Hitro razvrščanje v jeziku C ++ s primeri