shell sort c with examples
Tehnika razvrščanja lupine v jeziku C ++: popoln pregled.
Razvrščanje lupine pogosto imenujemo izboljšanje v primerjavi z vstavljanjem. Pri razvrščanju vstavkov povečamo za 1, da primerjamo elemente in jih postavimo v ustrezen položaj.
Pri razvrščanju po lupini je seznam razvrščen tako, da se razdeli na več manjših podlistkov. Ni nujno, da morajo biti seznami s sosednjimi elementi. Namesto tega tehnika razvrščanja lupine uporablja prirastek i, ki se imenuje tudi 'vrzel' in z njim ustvari seznam elementov, ki so ločeni od 'i' elementov.
=> Za ogled celotnega seznama vadnic za C ++ glejte tukaj.
vprašanja in odgovori na intervjuju za nadzor kakovosti pdf
Kaj se boste naučili:
Splošni algoritem
Splošni algoritem za razvrščanje lupine je podan spodaj.
sortiranje_ lupine (A, N)
kjer je A - seznam za razvrščanje; N - velikost_razmika
nastavite velikost vrzeli = N, zastavica = 1
medtem ko je velikost vrzeli> 1 ali zastavica = 1, ponovite
začeti
zastava zastave = 0
nastavite velikost vrzeli = (velikost_razmika + 1) / 2
konec
za i = 0 do i<(N-gap_size) repeat
začeti
če je A (i + velikost_razmika)> A (i)
zamenjaj A (i + velikost_razmika), A (i)
zastava zastave = 0
konec
konec
Tako smo v zgornjem algoritmu najprej nastavili N, ki je vrzel za razvrščanje polja A z uporabo lupine sort. V naslednjem koraku s pomočjo vrzeli razdelimo matriko na podniz. Nato v naslednjem koraku razvrstimo vsako od podniz, tako da bomo na koncu zanke dobili razvrščeno polje.
Nato si oglejmo podroben primer za boljše razumevanje razvrščanja lupine z uporabo slikovne predstavitve.
Ilustracija
Naj ponazorimo sorto lupine s primerom.
Upoštevajte naslednjo paleto 10 elementov.
Če zagotovimo vrzel 3, potem bomo imeli naslednje pod-sezname z vsakim elementom, ki je narazen za 3 elemente. Nato razvrstimo te tri sezname.
Razvrščeni pod-seznami in rezultatski seznam, ki ga dobimo po združitvi treh razvrščenih pod-seznamov, so prikazani spodaj.
Zgornja matrika, ki smo jo dobili po združitvi razvrščenih podnizov, je skoraj razvrščena. Zdaj lahko na tem seznamu izvedemo razvrščanje vstavljanja in razvrstimo celotno matriko. Ta zadnji korak je prikazan spodaj za referenco.
Kot je razvidno zgoraj, smo po izvedbi razvrščanja lupine in združevanju razvrščenih podlistkov zahtevali le tri poteze, da smo seznam popolnoma razvrstili. Tako lahko vidimo, da lahko bistveno zmanjšamo število korakov, potrebnih za razvrščanje matrike.
Izbira prirastka za ustvarjanje pod-seznamov je edinstvena značilnost razvrščanja lupine.
Primer C ++
Oglejmo si izvedbo razvrščanja lupine v C ++ spodaj.
#include using namespace std; // shellsort implementation int shellSort(int arr(), int N) { for (int gap = N/2; gap > 0; gap /= 2) { for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } int main() { int arr() = {45,23,53,43,18,24,8,95,101}, i; //Calculate size of array int N = sizeof(arr)/sizeof(arr(0)); cout << 'Array to be sorted:
'; for (int i=0; i Izhod:
Niz, ki ga je treba razvrstiti:
45 23 53 43 18 24 8 95 101
Niz po razvrščanju lupine:
8 18 23 24 43 45 53 95 101
Uporabili smo isti seznam, ki smo ga uporabili na ilustraciji, in vidimo, da najprej začnemo z ustvarjanjem dveh pod-seznamov in nato še zmanjšujemo vrzel. Ko so ustvarjeni pod seznami v skladu z določeno vrzeljo, razvrstimo vsakega od seznamov. Po razvrščanju vseh pod seznamov dobimo skoraj razvrščen seznam. Zdaj lahko ta seznam razvrstite z osnovno razvrstitev vstavljanja, ki bo trajala zelo malo premikov.
Nato izvedimo razvrščanje lupine z uporabo jezika Java.
Primer Java
// Java class for ShellSort class ShellSort { //function to sort the array using shell sort int sort(int arr()) { int N = arr.length; // Start with a big gap, then narrow the gap for (int gap = N/2; gap > 0; gap /= 2) { //sort sub lists created by applying gap for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } } class Main{ public static void main(String args()) { int arr() = {45,23,53,43,18,24,8,95,101}; int N = arr.length; System.out.println('Array to be sorted: '); for (int i=0; i Izhod:
Niz, ki ga je treba razvrstiti:
45 23 53 43 18 24 8 95 101
Niz po razvrščanju lupine:
8 18 23 24 43 45 53 95 101
V programih C ++ in Java smo uvedli enako logiko za razvrščanje lupine. Tako kot je razloženo zgoraj v programu Java, matriko najprej razdelimo na podniz in jih nato razvrstimo, da dobimo popolno razvrščeno polje.
Zaključek
Razvrščanje lupine je zelo učinkovit algoritem, ki se izboljša v primerjavi z razvrščanjem vstavljanja.
Medtem ko sortiranje vstavljanja deluje tako, da svoje elemente poveča za 1, lupinsko sortiranje s parametrom »gap« razdeli matriko na podniz, katerih elementi so »vrzel« narazen. Nato lahko posamezen seznam razvrstimo z razvrstitvijo vstavljanja, da dobimo popolno razvrščeno matriko.
Razvrščanje lupine deluje hitreje kot razvrščanje vstavljanja in za razvrščanje matrike v primerjavi z razvrščanjem vstavitve potrebuje manj premikov. Naša prihajajoča vadnica bo raziskala vse o tehniki razvrščanja kopice za razvrščanje struktur podatkov.
=> Obiščite tukaj, če se želite naučiti C ++ iz nič.
Priporočeno branje
- 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 vstavka v C ++ s primeri
- Združi razvrstitev v jeziku C ++ s primeri
- Razvrstitev kopice v C ++ z primeri
- Hitro razvrščanje v jeziku C ++ s primeri