logo

Алгоритам за сортирање бројања

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

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

Бројање сортирања је ефикасно када опсег није већи од броја објеката који се сортирају. Може се користити за сортирање негативних улазних вредности.

Сада, да видимо алгоритам сортирања бројања.

Алгоритам

 countingSort(array, n) // 'n' is the size of array max = find maximum element in the given array create count array with size maximum + 1 Initialize count array with all 0's for i = 0 to n find the count of every unique element and store that count at ith position in the count array for j = 1 to max Now, find the cumulative sum and store it in count array for i = n to 1 Restore the array elements Decrease the count of every restored element by 1 end countingSort 

Рад алгоритма сортирања бројања

Сада, да видимо како функционише алгоритам сортирања бројања.

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

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

Цоунтинг Сорт

1. Пронађите максимални елемент из датог низа. Дозволити мак бити максимални елемент.

Цоунтинг Сорт

2. Сада иницијализујте низ дужине максимално + 1 има свих 0 елемената. Овај низ ће се користити за чување броја елемената у датом низу.

Цоунтинг Сорт

3. Сада морамо да ускладиштимо број сваког елемента низа у њиховом одговарајућем индексу у низу бројача.

Број елемента ће бити сачуван као - Претпоставимо да се елемент низа '4' појави два пута, тако да је број елемента 4 2. Дакле, 2 се чува на 4тхположај низа бројања. Ако било који елемент није присутан у низу, поставите 0, тј. претпоставимо да елемент '3' није присутан у низу, тако да ће 0 бити ускладиштено на 3рдположај.

Цоунтинг Сорт
Цоунтинг Сорт

Сада, сачувајте кумулативни збир од цоунт елементи низа. То ће помоћи да се елементи поставе на тачан индекс сортираног низа.

филмска глумица Кајал
Цоунтинг Сорт
Цоунтинг Сорт

Слично томе, кумулативни број низа бројача је -

Цоунтинг Сорт

4. Сада пронађите индекс сваког елемента оригиналног низа

Цоунтинг Сорт

Након постављања елемента на његово место, смањите његов број за један. Пре постављања елемента 2, његов број је био 2, али након постављања на његову тачну позицију, нови број за елемент 2 је 1.

Цоунтинг Сорт

Слично томе, након сортирања, елементи низа су -

Цоунтинг Сорт

Сада је низ потпуно сортиран.

Бројање сложености сортирања

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

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

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

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

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

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

Спаце Цомплекити О(макс.)
Стабилно ДА
  • Просторна сложеност сортирања бројања је О(мак). Што је већи распон елемената, већа је сложеност простора.

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

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

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

 #include int getMax(int a[], int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countSort(int a[], int n) // function to perform counting sort { int output[n+1]; int max = getMax(a, n); int count[max+1]; //create count array with size [max+1] for (int i = 0; i <= max; ++i) { count[i]="0;" initialize count array with all zeros } for (int i="0;" < n; i++) store the of each element count[a[i]]++; for(int i<="max;" +="count[i-1];" find cumulative frequency * this loop will index original in array, and place elements output array* - 1;>= 0; i--) { output[count[a[i]] - 1] = a[i]; count[a[i]]--; // decrease count for same numbers } for(int i = 0; i<n; 16 i++) { a[i]="output[i];" store the sorted elements into main array } void printarr(int a[], int n) * function to print i; for (i="0;" i < n; printf('%d ', a[i]); main() a[]="{" 11, 30, 24, 7, 31, }; n="sizeof(a)/sizeof(a[0]);" printf('before sorting are - 
'); printarr(a, n); countsort(a, printf('
after 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/93/counting-sort-algorithm-12.webp" alt="Counting Sort"> <p> <strong>Program:</strong> Write a program to implement counting sort in C++.</p> <pre> #include using namespace std; int getMax(int a[], int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countSort(int a[], int n) // function to perform counting sort { int output[n+1]; int max = getMax(a, n); int count[max+1]; //create count array with size [max+1] for (int i = 0; i <= max; ++i) { count[i]="0;" initialize count array with all zeros } for (int i="0;" < n; i++) store the of each element count[a[i]]++; for(int i<="max;" +="count[i-1];" find cumulative frequency * this loop will index original in array, and place elements output array* - 1;>= 0; i--) { output[count[a[i]] - 1] = a[i]; count[a[i]]--; // decrease count for same numbers } for(int i = 0; i<n; 11 i++) { a[i]="output[i];" store the sorted elements into main array } void printarr(int a[], int n) * function to print i; for (i="0;" i < n; cout< <a[i]<<' '; main() a[]="{" 31, 11, 42, 7, 30, }; n="sizeof(a)/sizeof(a[0]);" cout<<'before sorting are - 
'; printarr(a, n); countsort(a, cout<<'
after 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/93/counting-sort-algorithm-13.webp" alt="Counting Sort"> <p> <strong>Program:</strong> Write a program to implement counting sort in C#.</p> <pre> using System; class CountingSort { static int getMax(int[] a, int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } static void countSort(int[] a, int n) // function to perform counting sort { int[] output = new int [n+1]; int max = getMax(a, n); int[] count = new int [max+1]; //create count array with size [max+1] for (int i = 0; i <= max; ++i) { count[i]="0;" initialize count array with all zeros } for (int i="0;" < n; i++) store the of each element count[a[i]]++; for(int i<="max;" +="count[i-1];" find cumulative frequency * this loop will index original in array, and place elements output array* - 1;>= 0; i--) { output[count[a[i]] - 1] = a[i]; count[a[i]]--; // decrease count for same numbers } for(int i = 0; i<n; 3 i++) { a[i]="output[i];" store the sorted elements into main array } static void printarr(int[] a, int n) * function to print i; for (i="0;" i < n; console.write(a[i] + ' '); main() int[] a="{" 43, 31, 2, 7, 10, 1, 5, 6, }; n="a.Length;" console.write('before sorting are - 
'); printarr(a,n); countsort(a,n); console.write('
after 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/93/counting-sort-algorithm-14.webp" alt="Counting Sort"> <p> <strong>Program:</strong> Write a program to implement counting sort in Java.</p> <pre> class CountingSort { int getMax(int[] a, int n) { int max = a[0]; for(int i = 1; i max) max = a[i]; } return max; //maximum element from the array } void countSort(int[] a, int n) // function to perform counting sort { int[] output = new int [n+1]; int max = getMax(a, n); //int max = 42; int[] count = new int [max+1]; //create count array with size [max+1] for (int i = 0; i <= max; ++i) { count[i]="0;" initialize count array with all zeros } for (int i="0;" < n; i++) store the of each element count[a[i]]++; for(int i<="max;" +="count[i-1];" find cumulative frequency * this loop will index original in array, and place elements output array* - 1;>= 0; i--) { output[count[a[i]] - 1] = a[i]; count[a[i]]--; // decrease count for same numbers } for(int i = 0; i<n; 41 i++) { a[i]="output[i];" store the sorted elements into main array } * function to print void printarray(int a[], int n) i; for (i="0;" i < n; system.out.print(a[i] + ' '); public static main(string args[]) a[]="{" 11, 30, 24, 7, 31, 16, 39, }; n="a.length;" countingsort c1="new" countingsort(); system.out.println('
before sorting are - c1.printarray(a, n); c1.countsort(a,n); system.out.println('
after system.out.println(); pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/93/counting-sort-algorithm-15.webp" alt="Counting Sort"> <p> <strong>Program:</strong> Write a program to implement counting sort in PHP.</p> <pre> <?php function getMax($a, $n) { $max = $a[0]; for($i = 1; $i $max) $max = $a[$i]; } return $max; //maximum element from the array } function countSort(&$a, $n) // function to perform counting sort { $LeftArray = array($n + 1); $max = getMax($a, $n); $count = array($max + 1); //create count array with size [max+1] for ($i = 0; $i <= $max; ++$i) { $count[$i] = 0; // Initialize count array with all zeros } for ($i = 0; $i < $n; $i++) // Store the count of each element { $count[$a[$i]]++; } for($i = 1; $i= 0; $i--) { $output[$count[$a[$i]] - 1] = $a[$i]; $count[$a[$i]]--; // decrease count for same numbers } for($i = 0; $i<$n; $i++) { $a[$i] = $output[$i]; //store the sorted elements into main array } } /* Function to print the array elements */ function printArray($a, $n) { for($i = 0; $i < $n; $i++) { print_r($a[$i]); echo ' '; } } $a = array( 9, 28, 22, 5, 29, 14, 37, 28, 9 ); $n = count($a); echo 'Before sorting array elements are - <br>&apos;; printArray($a, $n); countSort($a,$n); echo &apos; <br> After sorting array elements are - <br>&apos;; printArray($a, $n); ?&gt; </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/93/counting-sort-algorithm-16.webp" alt="Counting Sort"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <p>This article was not only limited to the algorithm. We have also discussed counting sort complexity, working, and implementation in different programming languages.</p> <hr></n;></=></pre></n;></=></pre></n;></=></pre></n;></=>

Излаз

листе у Јави
Цоунтинг Сорт

Дакле, то је све о чланку. Надамо се да ће вам чланак бити користан и информативан.

Овај чланак није био ограничен само на алгоритам. Такође смо разговарали о бројању сложености сортирања, раду и имплементацији у различитим програмским језицима.