Heap Sort C ++

Heap Sort C ++

Som vi vet at C ++ -språket har mange sorteringsalgoritmer for sortering av array-lignende strukturer. En av disse sorteringsteknikkene er haugen sortering. Det er ganske populært blant C ++ -utviklere fordi det anses å være den mest effektive når det gjelder dets arbeid. Det er litt annerledes enn andre sorteringsteknikker fordi det krever informasjon om datastrukturtrær sammen med konseptet med matriser. Hvis du har hørt og lært om binære trær, vil det ikke være et problem for deg å lære haugesort.

Innenfor haugesort kan to typer hauger genereres, i.e., Min-heap og max-heap. Max-Heap vil sortere det binære treet i synkende rekkefølge, mens Min-Heap vil sortere det binære treet i stigende rekkefølge. Med andre ord, haugen vil være "maks" når foreldroden til et barn er større i verdi og omvendt. Så vi har bestemt oss for å skrive denne artikkelen for alle de naive brukerne av C ++ som ikke har forkunnskaper om sortering, spesielt haugesort.

La oss starte dagens opplæring med Ubuntu 20.04 Logg inn for å få tilgang til Linux -systemet. Etter påloggingen, bruk av snarveien “Ctrl+Alt+T” eller aktivitetsområdet for å åpne sin konsollapplikasjon som heter “Terminal.”Vi må bruke konsollen for å lage en fil for implementering. Kommandoen for opprettelsen er en enkel "Touch" -instruksjon som følger det nye navnet for en fil som skal opprettes. Vi har navngitt C ++ -filen vår som “Heap.CC ”. Etter filopprettelsen, må du begynne å implementere kodene i den. For det må du åpne den først gjennom noen Linux -redaktører. Det er tre innebygde redaktører av Linux som kan brukes til dette formålet, i.e., nano, vim og tekst. Vi bruker “GNU Nano” -redaktøren.

Eksempel # 01:

Vi vil forklare et enkelt og ganske klart program for haugesort, slik at brukerne våre kan forstå og lære det godt. Bruk C ++ navneområdet og biblioteket for input-output i starten av denne koden. Heapify () -funksjonen vil bli kalt av en "sort ()" -funksjon for begge løkkerne. Den første "for" -sløyfen vil kalle pass den array "a," n = 6, og root = 2,1,0 (angående hver iterasjon) for å bygge en redusert haug.

Ved å bruke rotverdien hver gang vil vi få den "største" variableverdien er 2,1,0. Deretter vil vi beregne venstre “L” og høyre “R” -noder på treet ved å bruke “Root” -verdien. Hvis venstre node er større enn "rot", vil den første "hvis" tilordne "L" til den største. Hvis den høyre noden er større enn roten, vil den andre “hvis” tilordne “R” til den største. Hvis "største" ikke er lik "rot" -verdien, vil den tredje "hvis" bytte den "største" variableverdien med "rot" og kalle Heapify () -funksjonen i den, i.e., rekursiv samtale. Den ovennevnte hele prosessen vil også bli brukt til maksimalen når den andre "for" -sløyfen vil bli iterert innenfor sorteringsfunksjonen.

Den vist-below “sort ()” -funksjonen vil bli kalt for å sortere verdiene til matrisen “A” i stigende rekkefølge. Den første "for" -sløyfen er her; Bygg en haug, eller du kan si omordning. For dette vil verdien av “I” bli beregnet med “N/2-1” og dekrementert hver gang etter Heapify () -funksjonen Call. Hvis du har totalt 6 verdier, vil den bli 2. Totalt vil 3 iterasjoner bli utført, og Heapify -funksjonen vil bli kalt 3 ganger. Den neste "for" -sløyfen er her for å flytte den nåværende roten til enden av en matrise og ringe Heapify -funksjonen 6 ganger. Byttefunksjonen vil ta verdien til gjeldende iterasjonsindeks “A [i]” for en matrise med den første indeksverdien “A [0]” av en matrise. Heap () -funksjonen vil bli kalt for å generere maksimal haug på den allerede genererte reduserte haugen, i.e., “2,1,0” til å begynne med “for” loop.

Her kommer vår "Display ()" -funksjon for dette programmet som har tatt en rekke og antall elementer fra Main () driverkoden. "Display ()" -funksjonen vil bli kalt to ganger, i.e., før du sorterer for å vise den tilfeldige matrisen og etter sortering for å vise den sorterte matrisen. Det startes med "for" -sløyfen som vil bruke variabelen "n" for siste iterasjonsnummer og starter fra indeksen 0 for en matrise. C ++ -objektet “cout” brukes til å vise hver verdi av matrisen “A” på hver iterasjon mens løkken fortsetter. Tross alt vil verdiene for matrise “A” vises på skallet etter hverandre, atskilt fra hverandre med et rom. Endelig vil linjepausen settes inn ved hjelp av objektet "cout" igjen.

Dette programmet vil starte fra Main () -funksjonen da C ++ alltid har en tendens til å utføre fra det. Helt i starten av vår viktigste () -funksjon ble heltallsarrayen “A” initialisert med totalt 6 verdier. Alle verdiene lagres i en tilfeldig rekkefølge innen matrise a. Vi har tatt størrelsen på matrisen “A” og størrelsen på den første indeksverdien “0” av matrise A for å beregne det totale antall elementer i en matrise. Den beregnede verdien vil bli lagret i en ny variabel “n” av heltallstype. C ++ standardutgangen kan vises ved hjelp av et objekt “cout.”

Så vi bruker det samme “cout” -objektet for å vise den enkle meldingen “Original Array” på skallet for å la brukerne beskjed om at den usorterte originale matrisen kommer til å vises. Nå har vi en brukerdefinert "Display" -funksjon i dette programmet som vil bli kalt her for å vise den originale matrisen “A” på skallet. Vi har bestått det vår opprinnelige matrise og variabelen “n” i parametrene. Etter å ha vist den originale matrisen, bruker vi sort () -funksjonen her for å organisere og ordne vår originale matrise til stigende rekkefølge ved hjelp av Heap Sort.

Den originale matrisen og variabelen “n” sendes til den i parametrene. Den aller neste "cout" -uttalelsen brukes til å vise meldingen "sortert matrise" etter bruken av en "sorter" -funksjon for å sortere matrisen "a.”Funksjonsanropet til“ Display ”-funksjonen brukes igjen. Dette er for å vise den sorterte matrisen på skallet.

Etter at programmet er fullført, må vi gjøre det feilfritt ved å bruke "G ++" -kompilatoren på konsollen. Filnavnet vil bli brukt med "G ++" -kompilatorinstruksjonen. Koden vil bli spesifisert som feilfri hvis den ikke kaster noen utdata. Etter dette, “./en.ut "-kommandoen kan kastes ut for å utføre feilfri kodefil. Den originale matrisen og den sorterte matrisen er vist.

Konklusjon:

Dette handler om å jobbe med en haugesort og en måte å bruke Heap Sort i C ++ programkode for å utføre sortering. Vi har utdypet begrepet maksimal og min haug for haugesort i denne artikkelen og diskuterte også bruken av trær til dette formålet. Vi har forklart Heap -sorteringen på den mest enkle mulige måten for våre nye C ++ -brukere som bruker Linux -systemet.