insertion sort c with examples
Et dybtgående kig på indsættelsessortering med klassiske eksempler.
Indsorteringssortering er en sorteringsteknik, som kan ses på en måde, som vi spiller kort ved hånden. Den måde, hvorpå vi indsætter et hvilket som helst kort i et kort eller fjerner det, indsætter sorteringer, fungerer på samme måde.
Insertion sorterings algoritme teknik er mere effektiv end Bubble sortering og Selection sorteringsteknikker, men er mindre effektiv end de andre teknikker som Quicksort og Merge sortering.
=> Tjek de bedste C ++ træningsvejledninger her.
Hvad du lærer:
- Oversigt
- Generel algoritme
- Pseudokode
- Illustration
- C ++ Eksempel
- Java-eksempel
- Kompleksitetsanalyse af indsættelses sorteringsalgoritmen
- Konklusion
- Anbefalet læsning
Oversigt
I indsættelsessorteringsteknikken starter vi fra det andet element og sammenligner det med det første element og placerer det på et passende sted. Derefter udfører vi denne proces for de efterfølgende elementer.
Vi sammenligner hvert element med alle dets tidligere elementer og sætter eller indsætter elementet i dets rette position. Indsætningssorteringsteknik er mere gennemførlig for arrays med et mindre antal elementer. Det er også nyttigt til sortering af sammenkædede lister.
webtjenester interview spørgsmål og svar
Tilknyttede lister har en markør til det næste element (i tilfælde af en enkeltkædet liste) og en markør til det forrige element (også i tilfælde af en dobbeltkoblet liste). Derfor bliver det lettere at implementere indsættelsessortering for en linket liste.
Lad os udforske alt om indsætningssortering i denne vejledning.
Generel algoritme
Trin 1 : Gentag trin 2 til 5 for K = 1 til N-1
Trin 2 : indstil temp = A (K)
Trin 3 : indstil J = K - 1
Trin 4 : Gentag mens temp<=A(J)
sæt A (J + 1) = A (J)
indstil J = J - 1
(slutning af indre sløjfe)
Trin 5 : indstil A (J + 1) = temp
(slutningen af løkken)
Trin 6 : Afslut
Således i indsættelsessorteringsteknikken starter vi fra det andet element, da vi antager, at det første element altid er sorteret. Derefter sammenligner vi fra det andet element til det sidste element hvert element med alle dets tidligere elementer og sætter elementet i den rette position.
Pseudokode
Pseudokoden til sortering af indsættelse er angivet nedenfor.
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
Ovenstående er pseudokoden til indsættelsessortering, næste illustrerer vi denne teknik i det følgende eksempel.
Illustration
Det array, der skal sorteres, er som følger:
regex_match c ++
Nu for hvert pas sammenligner vi det aktuelle element med alle dets tidligere elementer. Så i første omgang starter vi med det andet element.
Således kræver vi N antal gennemløb for fuldstændigt at sortere en matrix, der indeholder N antal elementer.
Ovenstående illustration kan opsummeres i tabelform:
Passere | Usorteret liste | sammenligning | Sorteret liste |
---|---|---|---|
en | {12,3,5,10,8,1} | {12.3} | {3,12,5,10,8,1} |
to | {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} |
Som vist i ovenstående illustration begynder vi med 2ndelement, da vi antager, at det første element altid er sorteret. Så vi begynder med at sammenligne det andet element med det første og bytte position, hvis det andet element er mindre end det første.
Denne sammenligning og bytteproces placerer to elementer på deres rette steder. Dernæst sammenligner vi det tredje element med dets tidligere (første og andet) elementer og udfører den samme procedure for at placere det tredje element på det rette sted.
På denne måde placerer vi et element på hvert sted for hvert pas. For det første pass placerer vi det andet element på dets plads. Således har vi generelt brug for N-1-passeringer for at placere N-elementer på deres rette sted.
Dernæst vil vi demonstrere implementeringen af indsættelsessorteringsteknik på C ++ - sprog.
C ++ Eksempel
#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 < Produktion:
Input listen er
12 4 3 1 15 45 33 21 10 2
Sorteret liste er
1 2 3 4 10 12 15 21 33 45
Derefter vil vi se Java-implementeringen af Insertion-sorteringsteknikken.
Java-eksempel
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) + ' '); } } }
Produktion:
Inputliste med elementer ...
12 4 3 1 15 45 33 21 10 2
sorteret liste over elementer ...
1 2 3 4 10 12 15 21 33 45
I begge implementeringer kan vi se, at vi begynder at sortere fra 2ndelement i arrayet (loopvariabel j = 1) og sammenlign gentagne gange det aktuelle element med alle dets tidligere elementer, og sorter derefter elementet for at placere det i sin korrekte position, hvis det aktuelle element ikke er i orden med alle dets tidligere elementer.
Indsorteringssortering fungerer bedst og kan gennemføres i færre gennemløb, hvis matrixen er delvist sorteret. Men efterhånden som listen bliver større, falder dens præstationer. En anden fordel ved indsættelsessortering er, at det er en stabil sortering, hvilket betyder, at den opretholder rækkefølgen af lige elementer på listen.
Kompleksitetsanalyse af indsættelses sorteringsalgoritmen
Fra pseudokoden og illustrationen ovenfor er indsættelsessortering den effektive algoritme sammenlignet med boblesortering eller markeringssortering. I stedet for at bruge til loop og nuværende betingelser bruger den en while-loop, der ikke udfører flere ekstra trin, når arrayet er sorteret.
Selvom vi sender det sorterede array til Insertion-sorteringsteknikken, vil det stadig udføre det ydre for loop, hvorved der kræves et antal trin for at sortere et allerede sorteret array. Dette gør den bedste tidskompleksitet ved indsættelse sortere en lineær funktion af N, hvor N er antallet af elementer i arrayet.
Således er de forskellige kompleksiteter for indsætningssorteringsteknik angivet nedenfor:
hvordan man får vist dat-filer på windows
Værst tilfælde tidskompleksitet O (n 2) Kompleksitet i bedste tilfælde På) Gennemsnitlig tidskompleksitet O (n 2) Rumkompleksitet O (1)
På trods af disse kompleksiteter kan vi stadig konkludere, at indsættelsessortering er den mest effektive algoritme sammenlignet med de andre sorteringsteknikker som Bubblesortering og Selektionssortering.
Konklusion
Indsætningssortering er den mest effektive af alle de tre hidtil diskuterede teknikker. Her antager vi, at det første element sorteres, og derefter sammenligner hvert element gentagne gange med alle dets tidligere elementer og placerer det aktuelle element derefter i sin korrekte position i arrayet.
I denne vejledning har vi, mens vi diskuterer indsættelsessort, bemærket, at vi sammenligner elementerne ved hjælp af en forøgelse på 1, og de er også sammenhængende. Denne funktion resulterer i, at der kræves flere pas for at få den sorterede liste.
I vores kommende tutorial vil vi diskutere 'Shell-sortering', hvilket er en forbedring i forhold til Selection-sorteringen.
I shell-sortering introducerer vi en variabel kendt som 'inkrement' eller en 'gap', ved hjælp af hvilken vi deler listen i underlister, der indeholder ikke-sammenhængende elementer, der 'gap' fra hinanden. Shell-sortering kræver færre passeringer sammenlignet med indsættelsessortering og er også hurtigere.
I vores fremtidige tutorials vil vi lære om to sorteringsteknikker, 'Quicksort' og 'Mergesort', der bruger 'Divide and conquer' -strategi til sortering af datalister.
=> Hold øje med begyndere C ++ træningsvejledning her.
Anbefalet læsning
- Shell Sort In C ++ med eksempler
- Valg af sortering i C ++ med eksempler
- MongoDB Sort () metode med eksempler
- Unix sorteringskommando med syntaks, indstillinger og eksempler
- Boblesortering i C ++ med eksempler
- Heapsortering i C ++ med eksempler
- Flet sortering i C ++ med eksempler
- Hurtig sortering i C ++ med eksempler