Shell Sort C ++

Shell Sort C ++
C ++ -språket kom med mange sorteringsteknikker som skulle brukes i programmet for å sortere en rekke objekter. En av disse sorteringsteknikkene er Shell -sorteringen som hovedsakelig er en annen form for innsettingssort. Innenfor innsettingssort har vi en tendens til å flytte en enkelt verdi til den neste indeksposisjonen. Bevegelsen av en verdi til påfølgende neste indeks gir kanskje ikke det nødvendige resultatet hvis vi vil plassere den på slutten og kan ta mer tid mens du sorterer. Samtidig kan skallsorteringen flytte en verdi langt fra det opprinnelige stedet og tar mindre tid på å gjøre det. Dermed har vi bestemt oss for å demonstrere arbeidet med Shell Sort -teknikken i C ++ programmering. La oss starte med C ++ -filoppretting og åpningen av instruksjonene som er demonstrert nedenfor på terminalkonsollen til Ubuntu 20.04 System.

Eksempel 01:

Med utgangspunkt i det første eksemplet i en ny fil, må vi bruke de nødvendige bibliotekene først. Uten "iostream" -overskriften kan en bruker ikke benytte seg av noen inngangs- og utgangsstrøm i koden. En C ++ -programmerer vil alltid benytte seg.H, ”osv. Her kommer Swap () -metoden som vil bli kalt av "Sorter" -funksjonen. Sorteringsfunksjonen vil passere to verdier på forskjellige steder til “Swap ()” -metoden og bruke “Temp” -variabelen for å bytte dem med hverandre.

Show () -funksjonen vil ta en matrise og størrelsen som skal vises i parametrene fra Main () -metoden. Den vil bruke "for" -løkken for å iterere hele matrisen opp til størrelsen “S.”Bruk“ cout ”-objektet til å vise hver verdi ved å bruke indeksen“ I ”atskilt fra andre verdier med et rom. Etter at alle verdiene er vist, vil cout bli brukt igjen for å legge til linjeskiftet.

Etter at den usorterte matrisen er vist, snur det at "sorter" -funksjonen skal fungere med den. Sorteringsfunksjonen vil ta en matrise og størrelsen for bruk. Initialiserte tre heltallvariabler g, j, k. Variabelen “G” vil bli brukt i den første ytre “for” -sløyfen for å redusere gapet mellom verdiene. Det vil bli startet fra midten av matrisen i henhold til “g = n/2”. På hver iterasjon vil gapet bli igjen redusert med "g/2", i.e., En annen halvdel vil bli opprettet. Ved å gjøre det vil matrisen bli delt inn i forskjellige deler, og gapstørrelsen vil være mindre. Den neste “J” -løkken starter fra gjeldende gapverdi, i.e., “G,” som vil være midtpunktet til en matrise på den tiden. Og det vil fortsette til den siste indeksen for en matrise. På hver iterasjon vil "j" bli økt. "K" for loop vil starte fra "J-G" og fortsette til "K> =.”Hvis verdien til“ K+G ”er større enn eller lik verdien ved“ K ”for en matrise, vil den bryte sløyfen. Ellers vil verdiene bli byttet av "Swap" -funksjonssamtalen. Sannsynligvis vil verdien til “K+G” være en startposisjon, og “K” vil være i den siste posisjonen til en matrise.

Hvert program starter utførelsen fra Main () driverfunksjonskoden mens utførelsen. Vår viktigste () -funksjon er startet med en heltallsarray “A” -initialisering. Denne matrisen “A” vil være i tilfeldig rekkefølge, i.e., uordnet. "COUT" -objektet er C ++ standardutgangsuttalelsen som brukes til å vise litt tekst eller variabel verdi på skallet. Denne gangen har vi brukt den for å fortelle brukere at matrisen før sortering blir vist på skjermen. "Show ()" -funksjonen vil bli kalt ved å sende den den originale usorterte matrisen "A" og antall verdier du vil vise før du sorterer. Selv om det er totalt 10 elementer i matrisen, har vi sortert og vist bare 9. "Sorter" -metoden kalles ved å passere utvalget og antall elementer som skal sorteres her. Etter at sortering er gjort med Shell Sort, vil "show" -metoden bli brukt igjen for å vise totalen av de første 9 elementene som er sortert på skallet.

Skallet.CC-filen ble samlet og resulterte i underutgangen etter utførelsen. De usorterte 9 elementene for matrisen vises først. I den siste linjen vises de samme 9 elementene i en matrise i stigende rekkefølge for sortering.

Eksempel 02:

Her kommer et nytt eksempel på å bruke Shell Sort i programmet vårt. Vi har brukt det samme skallet.CC -fil og initialiserte koden vår med samme overskrift og navneområde. Dette programmet starter fra Main () -funksjonen. Main () -metoden har et heltall ARRAY A av 5 verdier som allerede er initialisert. "N" -variabelen initialiseres ved å bruke "størrelse ()" -funksjonen for C++. Dette brukes til å beregne totale tall i en matrise “a” og lagre den verdien til variabel “n.”Vi kan se at matrisen bare har 5 elementer, slik at du bare kan hoppe over bruken av å beregne flere elementer og bruke“ 5 ”hvor som helst i koden.

Det kommer meldingen for brukere å være våken fordi den usorterte matrisen vises, i.e., via “Cout.”" Display () "-funksjonen kalles her for å vise den fullstendige usorterte matrisen ved å passere den en matrise og antall elementer i den. Display () -funksjonen vil bruke “For” -løkken for å iterere den passerte matrisen opp til den siste indeksen og vise verdiene som den bruker objektet “cout” og indeks “i.”Her kommer“ Sort () ”-metoden. Funksjonsanropet til denne metoden tar matrisen og det totale antall elementer som inngang. Den ytre mest "for" -sløyfen er her for å redusere gapet mellom verdiene/indeksene ved å dele det totale antall elementer med 2.

Verdien av “G” må være større enn 0, og den vil bli redusert med 2 igjen etter hver iterasjon. Dette vil redusere gapet i hver iterasjon. Den indre "jeg" -løkken vil ta verdien av gapet "g" som utgangspunkt og fortsette til "n.”Innenfor denne sløyfen vil verdien av“ I ”bli tildelt den" temp "midlertidige variabelen. Den indre mest "J" -løkken er her. Det starter fra punktet “i” til verdien av G blir lik eller større enn “G”, og også verdien ved indeksen “J-G” for matrisen blir større enn “Temp” -variabelen. “J” vil bli redusert med “G” hver gang. Denne sløyfen vil fortsette å bytte verdien ved “J-G” -indeksen med verdien til “J.”Verdien av“ temp ”vil bli tilordnet indeksen“ j ”i matrisen, i.e., Bytt der det er nødvendig. Etter å ha kommet tilbake til Main () -funksjonen, vil Display () -metoden bli kalt igjen for å vise den sorterte matrisen.

På sammenstilling og kjøring av skallet.CC -fil, viser det seg at den usorterte matrisen er sortert nå.

Konklusjon:

I vår introduksjonsparagraf har vi illustrert hovedformålet med å bruke skallsorten i stedet for innsettingssorter i C++. For å demonstrere hvordan det fungerer, er det bygget to enkle, men likevel forskjellige eksempler, noe som kan endres i henhold til brukerens preferanser. Det første eksemplet bruker brukerdefinerte metoder for å bytte og sortere elementer, men det andre bruker en enkelt funksjon for å utføre begge deler. Begge disse skallsorter-scenariene kan brukes til ethvert teknologirelatert prosjekt.