shell sort c with examples
Tehnika sortiranja ljuske na C ++: cjelovit pregled.
Razvrstavanje ljuske često se naziva poboljšanjem u odnosu na umetanje. Pri sortiranju umetanja uzimamo korake za 1 da bismo usporedili elemente i postavili ih u odgovarajući položaj.
Kod razvrstavanja po ljusci, popis se sortira raščlanjivanjem na veći broj manjih podlista. Nije nužno da popisi moraju biti sa susjednim elementima. Umjesto toga, tehnika razvrstavanja ljuske koristi inkrement i, koji se također naziva 'jaz' i koristi ga za stvaranje popisa elemenata koji su 'i' elementi odvojeni.
=> Pogledajte ovdje kako biste istražili cjeloviti popis vodiča za C ++.
lažni gmail račun generator i lozinka
Što ćete naučiti:
Opći algoritam
Općeniti algoritam za sortiranje ljuske dan je u nastavku.
sortiraj_ljusku (A, N)
gdje je A - popis za sortiranje; N - veličina_razmaka
postavi veličinu_razmaka = N, zastavicu = 1
dok je veličina_razmaka> 1 ili zastavica = 1, ponovite
početi
postaviti zastavicu = 0
postavi veličinu_prazine = (veličina_razmaka + 1) / 2
kraj
za i = 0 do i<(N-gap_size) repeat
početi
ako je A (i + veličina_razmaka)> A (i)
zamijeni A (i + veličina_razmaka), A (i)
postaviti zastavicu = 0
kraj
kraj
Tako smo u gornjem algoritmu prvo postavili N što je praznina za sortiranje niza A pomoću sortiranja ljuske. U sljedećem koraku dijelimo niz na podnizove pomoću praznine. Zatim u sljedećem koraku razvrstavamo svaki od pod-nizova tako da ćemo na kraju petlje dobiti razvrstani niz.
Dalje, razmotrimo detaljan primjer kako bismo bolje razumjeli sortu ljuske pomoću slikovnog prikaza.
Ilustracija
Ilustrirajmo Shell sortu na primjeru.
Razmotrite sljedeći niz od 10 elemenata.
Ako pružimo razmak od 3, tada ćemo imati sljedeće pod-popise sa svakim elementom koji je odvojen od 3 elementa. Zatim razvrstavamo ove tri podliste.
Sortirani pod-popisi i rezultantni popis koji dobivamo nakon kombiniranja tri razvrstana pod-popisa prikazani su u nastavku.
Gornji niz koji smo dobili nakon spajanja razvrstanih podsredova gotovo je razvrstan. Sada možemo izvršiti sortiranje umetanja na ovom popisu i sortirati cijeli niz. Ovaj posljednji korak prikazan je u nastavku za vašu referencu.
Kao što smo vidjeli gore, nakon izvođenja razvrstavanja ljuske i spajanja razvrstanih podslista, bila su nam potrebna samo tri poteza za potpuno razvrstavanje popisa. Tako možemo vidjeti da možemo značajno smanjiti broj koraka potrebnih za sortiranje niza.
Izbor prirasta za stvaranje pod-popisa jedinstvena je značajka sortiranja ljuske.
Primjer C ++
Pogledajmo implementaciju sortiranja ljuske u C ++ u nastavku.
#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 Izlaz:
Niz za sortiranje:
45 23 53 43 18 24 8 95 101
Niz nakon sortiranja ljuske:
8 18 23 24 43 45 53 95 101
Koristili smo isti popis koji smo koristili na ilustraciji i možemo vidjeti da smo u početku kreirali dva podpopisa, a zatim dodatno smanjili jaz. Jednom kad se podpopisi kreiraju prema navedenom razmaku, sortiramo svaki od popisa. Nakon što su sve pod-liste razvrstane, dobivamo gotovo sortirani popis. Sada se ovaj popis može sortirati pomoću osnovne vrste umetanja koja će trebati vrlo malo poteza.
Dalje, provedimo sortiranje ljuske pomoću Java jezika.
Primjer 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 Izlaz:
Niz za sortiranje:
45 23 53 43 18 24 8 95 101
Niz nakon sortiranja ljuske:
8 18 23 24 43 45 53 95 101
Primijenili smo istu logiku za sortiranje ljuske i u C ++ i u Java programima. Prema tome, kako je gore objašnjeno u programu Java, prvo dijelimo niz na podsklopove, a zatim ih sortiramo da bismo dobili cjeloviti razvrstani niz.
Zaključak
Sortiranje ljuske je vrlo učinkovit algoritam koji dolazi do poboljšanja u odnosu na sortiranje umetanja.
Dok sortiranje umetanja djeluje tako da poveća svoje elemente za 1, sortiranje ljuske koristi parametar 'jaz' da podijeli niz na podnizove čiji su elementi 'jaz'. Tada možemo sortirati pojedinačni popis pomoću sortiranja umetanjem kako bismo dobili cjeloviti sortirani niz.
Razvrstavanje ljuske izvodi se brže od sortiranja umetanja i uzima manje poteza za sortiranje niza u usporedbi s sortiranjem umetanja. Naš predstojeći vodič istražit će sve o tehnici sortiranja hrpe za sortiranje struktura podataka.
=> Posjetite ovdje da biste C ++ naučili od nule.
Preporučena literatura
- Sortiranje odabira na C ++ s primjerima
- MongoDB metoda sortiranja () s primjerima
- Unix naredba za sortiranje sa sintaksom, opcijama i primjerima
- Razvrstavanje mjehurića na C ++ s primjerima
- Sortiranje umetanja u C ++ s primjerima
- Spoji sortiranje u C ++ s primjerima
- Razvrstavanje hrpe u C ++ s primjerima
- Brzo sortiranje u C ++ s primjerima