logo

Алгоритам за сортирање шкољке

У овом чланку ћемо разговарати о алгоритму сортирања шкољке. Схелл сортирање је генерализација сортирања уметањем, која превазилази недостатке сортирања уметањем упоређивањем елемената раздвојених размаком од неколико позиција.

То је алгоритам за сортирање који је проширена верзија сортирања уметањем. Схелл сортирање је побољшало просечну временску сложеност сортирања уметањем. Слично сортирању уметањем, то је алгоритам за сортирање заснован на поређењу и на месту. Схелл сортирање је ефикасно за скупове података средње величине.

У сортирању уметањем, елементи се могу померити унапред само за једну позицију. Да би се елемент померио на удаљену позицију, потребно је много покрета који повећавају време извршења алгоритма. Али сортирање љуске превазилази овај недостатак сортирања уметањем. Омогућава померање и замену удаљених елемената.

Овај алгоритам прво сортира елементе који су удаљени један од другог, а затим смањује јаз између њих. Овај јаз се назива као интервал. Овај интервал се може израчунати коришћењем Кнутх'с формула дата испод -

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

Сада, да видимо алгоритам сортирања шкољке.

Алгоритам

Једноставни кораци за постизање сортирања шкољке су наведени на следећи начин -

 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;>

Рад алгоритма сортирања љуске

Сада, да видимо рад алгоритма сортирања шкољке.

стринг у инт

Да бисмо разумели рад алгоритма сортирања шкољке, узмимо несортирани низ. Биће лакше разумети сортирање шкољке на примеру.

Нека су елементи низа -

Алгоритам за сортирање шкољке

Користићемо оригиналну секвенцу сортирања шкољке, тј. Н/2, Н/4,....,1 као интервале.

У првој петљи, н је једнако 8 (величина низа), тако да елементи леже на интервалу од 4 (н/2 = 4). Елементи ће бити упоређени и замењени ако нису у реду.

Овде, у првој петљи, елемент на 0тхпозиција ће се упоредити са елементом на 4тхположај. Ако је 0тхелемент већи, биће замењен елементом на 4тхположај. Иначе, остаје исто. Овај процес ће се наставити за преостале елементе.

У интервалу од 4, подлисте су {33, 12}, {31, 17}, {40, 25}, {8, 42}.

Алгоритам за сортирање шкољке

Сада морамо да упоредимо вредности у свакој подлисти. Након поређења, морамо да их заменимо ако је потребно у оригиналном низу. Након поређења и замене, ажурирани низ ће изгледати на следећи начин -

Алгоритам за сортирање шкољке

У другој петљи, елементи леже на интервалу од 2 (н/4 = 2), где је н = 8.

Сада узимамо интервал од 2 да сортирате остатак низа. Са интервалом од 2, биће генерисане две подлисте - {12, 25, 33, 40} и {17, 8, 31, 42}.

Алгоритам за сортирање шкољке

Сада поново морамо да упоредимо вредности у свакој подлисти. Након поређења, морамо да их заменимо ако је потребно у оригиналном низу. Након поређења и замене, ажурирани низ ће изгледати на следећи начин -

гимп како да поништите избор
Алгоритам за сортирање шкољке

У трећој петљи, елементи леже у интервалу од 1 (н/8 = 1), где је н = 8. На крају, користимо интервал вредности 1 да сортирамо остале елементе низа. У овом кораку, сортирање љуске користи сортирање уметањем за сортирање елемената низа.

Алгоритам за сортирање шкољке

Сада је низ сортиран у растућем редоследу.

Сложеност сортирања шкољке

Сада, да видимо временску сложеност Схелл сортирања у најбољем, просечном и најгорем случају. Такође ћемо видети комплексност простора Схелл сорте.

1. Временска сложеност

Случај Временска сложеност
Најбољи случај О(н*логн)
Авераге Цасе О(н*лог(н)2)
Најгори случај На2)
    Најбољи случај сложености -Појављује се када није потребно сортирање, односно, низ је већ сортиран. У најбољем случају временска сложеност Схелл сортирања је О(н*логн). Просечна сложеност случаја -Јавља се када су елементи низа у збрканом редоследу који није правилно растући и неопадајући. Просечна временска сложеност Схелл сортирања је О(н*логн). Сложеност у најгорем случају -Јавља се када је потребно да се елементи низа сортирају обрнутим редоследом. То значи да претпоставимо да морате да сортирате елементе низа у растућем редоследу, али његови елементи су у опадајућем редоследу. У најгорем случају временска сложеност Схелл сортирања је На2).

2. Сложеност простора

Спаце Цомплекити О(1)
Стабилно НЕ
  • Просторна сложеност Схелл сортирања је О(1).

Имплементација сортирања Схелл

Сада, хајде да видимо програме Схелл сортирања у различитим програмским језицима.

Програм: Напишите програм за имплементацију Схелл сортирања у језику Ц.

 #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;>