logo

Algoritem za razvrščanje lupine

V tem članku bomo razpravljali o algoritmu razvrščanja lupine. Lupinsko razvrščanje je posplošitev razvrščanja z vstavljanjem, ki premaguje pomanjkljivosti razvrščanja z vstavljanjem s primerjavo elementov, ločenih z vrzeljo več položajev.

To je algoritem za razvrščanje, ki je razširjena različica razvrščanja z vstavljanjem. Lupinsko razvrščanje je izboljšalo povprečno časovno zahtevnost razvrščanja z vstavljanjem. Podobno kot razvrščanje z vstavljanjem je algoritem za razvrščanje na mestu, ki temelji na primerjavi. Lupinsko razvrščanje je učinkovito za srednje velike nize podatkov.

Pri razvrščanju z vstavljanjem lahko elemente naenkrat premaknete naprej samo za en položaj. Za premik elementa v oddaljen položaj je potrebnih veliko premikov, ki povečajo čas izvajanja algoritma. Toda lupinsko razvrščanje premaga to pomanjkljivost vstavljanja. Omogoča tudi premikanje in menjavo oddaljenih elementov.

koliko tednov v mesecu

Ta algoritem najprej razvrsti elemente, ki so daleč drug od drugega, nato pa zmanjša vrzel med njimi. Ta vrzel se imenuje kot interval. Ta interval je mogoče izračunati z uporabo Knuthova formula podana spodaj -

 h = h * 3 + 1 where, 'h' is the interval having initial value 1. 

Zdaj pa poglejmo algoritem lupinskega razvrščanja.

Algoritem

Preprosti koraki za doseganje lupinskega razvrščanja so navedeni na naslednji način -

 ShellSort(a, n) // &apos;a&apos; is the given array, &apos;n&apos; is the size of array for (interval = n/2; interval &gt; 0; interval /= 2) for ( i = interval; i <n; i +="1)" temp="a[i];" for (j="i;" j>= interval &amp;&amp; a[j - interval] &gt; temp; j -= interval) a[j] = a[j - interval]; a[j] = temp; End ShellSort </n;>

Delovanje algoritma za razvrščanje Shell

Zdaj pa poglejmo delovanje algoritma lupine za razvrščanje.

Da bi razumeli delovanje lupinskega algoritma za razvrščanje, vzemimo nerazvrščeno matriko. Razvrščanje lupine bo lažje razumeti na primeru.

Naj so elementi matrike -

Algoritem za razvrščanje lupine

Kot intervale bomo uporabili izvirno zaporedje lupinskega razvrščanja, tj. N/2, N/4,....,1.

V prvi zanki je n enak 8 (velikost niza), torej elementi ležijo v intervalu 4 (n/2 = 4). Elementi bodo primerjani in zamenjani, če niso v redu.

Tukaj, v prvi zanki, element na 0thpoložaj bo primerjan z elementom pri 4thpoložaj. Če je 0thelement večji, bo zamenjan z elementom pri 4thpoložaj. Sicer pa ostaja enako. Ta postopek se bo nadaljeval za preostale elemente.

V intervalu 4 so podseznami {33, 12}, {31, 17}, {40, 25}, {8, 42}.

polni seštevalnik
Algoritem za razvrščanje lupine

Zdaj moramo primerjati vrednosti na vsakem podseznamu. Po primerjavi jih moramo po potrebi zamenjati v izvirnem nizu. Po primerjavi in ​​zamenjavi bo posodobljena matrika videti takole -

Algoritem za razvrščanje lupine

V drugi zanki elementi ležijo v intervalu 2 (n/4 = 2), kjer je n = 8.

Zdaj vzamemo interval od 2 da razvrstite preostali del matrike. Z intervalom 2 bosta ustvarjena dva podseznama - {12, 25, 33, 40} in {17, 8, 31, 42}.

Algoritem za razvrščanje lupine

Zdaj moramo spet primerjati vrednosti na vsakem podseznamu. Po primerjavi jih moramo po potrebi zamenjati v izvirnem nizu. Po primerjavi in ​​zamenjavi bo posodobljena matrika videti takole -

Algoritem za razvrščanje lupine

V tretji zanki elementi ležijo v intervalu 1 (n/8 = 1), kjer je n = 8. Na koncu uporabimo interval vrednosti 1 za razvrščanje preostalih elementov matrike. V tem koraku lupinsko razvrščanje uporablja razvrščanje z vstavljanjem za razvrščanje elementov polja.

Algoritem za razvrščanje lupine

Zdaj je niz razvrščen v naraščajočem vrstnem redu.

Zapletenost razvrščanja lupine

Zdaj pa poglejmo časovno kompleksnost razvrščanja Shell v najboljšem, povprečnem in najslabšem primeru. Videli bomo tudi prostorsko kompleksnost sorte Shell.

1. Časovna zapletenost

Ovitek Časovna zapletenost
Najboljši primer O(n*logn)
Povprečen primer O(n*log(n)2)
V najslabšem primeru O(n2)
    Najboljša zapletenost -Pojavi se, ko razvrščanje ni potrebno, tj. ko je matrika že razvrščena. Najboljša časovna zapletenost razvrščanja Shell je O(n*logn). Povprečna zapletenost primera -Pojavi se, ko so elementi niza v zmešanem vrstnem redu, ki ni pravilno naraščajoče in ni pravilno padajoče. Povprečna časovna zapletenost primera razvrščanja Shell je O(n*logn). Kompleksnost v najslabšem primeru -Pojavi se, ko je treba elemente matrike razvrstiti v obratnem vrstnem redu. To pomeni, da morate elemente matrike razvrstiti v naraščajočem vrstnem redu, njeni elementi pa so v padajočem vrstnem redu. Najslabši primer časovne zapletenosti razvrščanja Shell je O(n2).

2. Kompleksnost prostora

Kompleksnost prostora O(1)
Stabilen št
  • Prostorska kompleksnost razvrščanja Shell je O(1).

Izvedba sortiranja Shell

Zdaj pa si oglejmo programe razvrščanja Shell v različnih programskih jezikih.

Program: Napišite program za izvajanje lupinskega razvrščanja v jeziku C.

 #include /* function to implement shellSort */ int shell(int a[], int n) { /* Rearrange the array elements at n/2, n/4, ..., 1 intervals */ for (int interval = n/2; interval &gt; 0; interval /= 2) { for (int i = interval; i <n; i +="1)" { * store a[i] to the variable temp and make ith position empty int j; for (j="i;" j>= interval &amp;&amp; a[j - interval] &gt; temp; j -= interval) a[j] = a[j - interval]; // put temp (the original a[i]) in its correct position a[j] = temp; } } return 0; } void printArr(int a[], int n) /* function to print the array elements */ { int i; for (i = 0; i <n; 42 i++) printf('%d ', a[i]); } int main() { a[]="{" 33, 31, 40, 8, 12, 17, 25, }; n="sizeof(a)" sizeof(a[0]); printf('before sorting array elements are - 
'); printarr(a, n); shell(a, printf('
after applying shell sort, the return 0; < pre> <p> <strong>Output</strong> </p> <p>After the execution of above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/72/shell-sort-algorithm-7.webp" alt="Shell Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Shell sort in C++.</p> <pre> #include using namespace std; /* function to implement shellSort */ int shell(int a[], int n) { /* Rearrange the array elements at n/2, n/4, ..., 1 intervals */ for (int interval = n/2; interval &gt; 0; interval /= 2) { for (int i = interval; i <n; i +="1)" { * store a[i] to the variable temp and make ith position empty int j; for (j="i;" j>= interval &amp;&amp; a[j - interval] &gt; temp; j -= interval) a[j] = a[j - interval]; // put temp (the original a[i]) in its correct position a[j] = temp; } } return 0; } void printArr(int a[], int n) /* function to print the array elements */ { int i; for (i = 0; i <n; 41 i++) cout< <a[i]<<' '; } int main() { a[]="{" 32, 30, 39, 7, 11, 16, 24, }; n="sizeof(a)" sizeof(a[0]); cout<<'before sorting array elements are - 
'; printarr(a, n); shell(a, cout<<'
after applying shell sort, the return 0; < pre> <p> <strong>Output</strong> </p> <p>After the execution of the above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/72/shell-sort-algorithm-8.webp" alt="Shell Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Shell sort in C#.</p> <pre> using System; class ShellSort { /* function to implement shellSort */ static void shell(int[] a, int n) { /* Rearrange the array elements at n/2, n/4, ..., 1 intervals */ for (int interval = n/2; interval &gt; 0; interval /= 2) { for (int i = interval; i <n; i +="1)" { * store a[i] to the variable temp and make ith position empty int j; for (j="i;" j>= interval &amp;&amp; a[j - interval] &gt; temp; j -= interval) a[j] = a[j - interval]; /* put temp (the original a[i]) in its correct position */ a[j] = temp; } } } static void printArr(int[] a, int n) /* function to print the array elements */ { int i; for (i = 0; i <n; 40 i++) console.write(a[i] + ' '); } static void main() { int[] a="{" 31, 29, 38, 6, 10, 15, 23, }; int n="a.Length;" console.write('before sorting array elements are - 
'); printarr(a, n); shell(a, console.write('
after applying shell sort, the < pre> <p> <strong>Output</strong> </p> <p>After the execution of the above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/72/shell-sort-algorithm-9.webp" alt="Shell Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement Shell sort in Java.</p> <pre> class ShellSort { /* function to implement shellSort */ static void shell(int a[], int n) { /* Rearrange the array elements at n/2, n/4, ..., 1 intervals */ for (int interval = n/2; interval &gt; 0; interval /= 2) { for (int i = interval; i <n; i +="1)" { * store a[i] to the variable temp and make ith position empty int j; for (j="i;" j>= interval &amp;&amp; a[j - interval] &gt; temp; j -= interval) a[j] = a[j - interval]; /* put temp (the original a[i]) in its correct position */ a[j] = temp; } } } static void printArr(int a[], int n) /* function to print the array elements */ { int i; for (i = 0; i <n; 39 i++) system.out.print(a[i] + ' '); } public static void main(string args[]) { int a[]="{" 30, 28, 37, 5, 9, 14, 22, }; n="a.length;" system.out.print('before sorting array elements are - 
'); printarr(a, n); shell(a, system.out.print('
after applying shell sort, the < pre> <p> <strong>Output</strong> </p> <p>After the execution of the above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/72/shell-sort-algorithm-10.webp" alt="Shell Sort Algorithm"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <hr></n;></n;></pre></n;></n;></pre></n;></n;></pre></n;></n;>