logo

Sorteeralgoritme tellen

In dit artikel bespreken we het telsoortalgoritme. Telsortering is een sorteertechniek die is gebaseerd op de sleutels tussen specifieke bereiken. In codeer- of technische interviews voor software-ingenieurs wordt veel gevraagd naar sorteeralgoritmen. Het is dus belangrijk om het onderwerp te bespreken.

Deze sorteertechniek voert geen sortering uit door elementen te vergelijken. Het sorteert door objecten te tellen met verschillende sleutelwaarden, zoals hashen. Daarna voert het enkele rekenkundige bewerkingen uit om de indexpositie van elk object in de uitvoerreeks te berekenen. Telsortering wordt niet gebruikt als sorteeralgoritme voor algemene doeleinden.

Telsortering is effectief als het bereik niet groter is dan het aantal te sorteren objecten. Het kan worden gebruikt om de negatieve invoerwaarden te sorteren.

Laten we nu eens kijken naar het algoritme voor het tellen van sorteringen.

Algoritme

 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 

Werking van telsoortalgoritme

Laten we nu eens kijken naar de werking van het teltype-algoritme.

Om de werking van het tellende sorteeralgoritme te begrijpen, nemen we een ongesorteerde array. Het zal gemakkelijker zijn om de telsoort te begrijpen aan de hand van een voorbeeld.

turbo c++ downloaden

Laat de elementen van array zijn -

Tellen Sorteren

1. Zoek het maximale element uit de gegeven array. Laten maximaal het maximale element zijn.

Tellen Sorteren

2. Initialiseer nu de array met lengte maximaal + 1 met alle 0 elementen. Deze array wordt gebruikt om het aantal elementen in de gegeven array op te slaan.

Tellen Sorteren

3. Nu moeten we de telling van elk array-element opslaan in de overeenkomstige index in de count-array.

De telling van een element wordt opgeslagen als - Stel dat array-element '4' twee keer voorkomt, dus de telling van element 4 is 2. Daarom wordt 2 opgeslagen op de 4epositie van de telarray. Als een element niet aanwezig is in de array, plaats dan 0, d.w.z. stel dat element '3' niet aanwezig is in de array, dus 0 wordt opgeslagen op 3rdpositie.

Tellen Sorteren
Tellen Sorteren

Sla nu de cumulatieve som op van graaf array-elementen. Het zal helpen om de elementen op de juiste index van de gesorteerde array te plaatsen.

Tellen Sorteren
Tellen Sorteren

Op dezelfde manier is de cumulatieve telling van de telreeks -

Tellen Sorteren

4. Zoek nu de index van elk element van de originele array

Tellen Sorteren

Nadat je het element op zijn plaats hebt geplaatst, verlaag je het aantal met één. Voordat element 2 werd geplaatst, was de telling 2, maar nadat deze op de juiste positie was geplaatst, is de nieuwe telling voor element 2 1.

Tellen Sorteren

Op dezelfde manier zijn de array-elementen na het sorteren -

Tellen Sorteren

Nu is de array volledig gesorteerd.

Sorteercomplexiteit tellen

Laten we nu eens kijken naar de tijdscomplexiteit van het tellen in het beste geval, het gemiddelde en het slechtste geval. We zullen ook de ruimtecomplexiteit van de telsoort zien.

1. Tijdcomplexiteit

Geval Tijd Complexiteit
Beste geval O(n + k)
Gemiddeld geval O(n + k)
Het slechtste geval O(n + k)
    Beste case-complexiteit -Het treedt op als er geen sortering vereist is, d.w.z. de array is al gesorteerd. De beste tijdcomplexiteit van het tellen is O(n + k) .Gemiddelde casuscomplexiteit -Het treedt op wanneer de array-elementen zich in een door elkaar geplaatste volgorde bevinden die niet goed oplopend en niet goed aflopend is. De gemiddelde casus-tijdcomplexiteit van het tellen is O(n + k) .In het ergste geval complexiteit -Het treedt op wanneer de array-elementen in omgekeerde volgorde moeten worden gesorteerd. Dat betekent dat u de array-elementen in oplopende volgorde moet sorteren, maar de elementen ervan in aflopende volgorde. De worst-case tijdcomplexiteit van het tellen is dat wel O(n + k) .

In alle bovenstaande gevallen is de tijdscomplexiteit van het tellen hetzelfde. Dit komt omdat het algoritme doorgaat n+k keer, ongeacht hoe de elementen in de array zijn geplaatst.

Telsortering is beter dan de op vergelijkingen gebaseerde sorteertechnieken, omdat er geen vergelijking is tussen elementen bij telsortering. Maar als de gehele getallen erg groot zijn, is de telsoort slecht omdat er arrays van die grootte moeten worden gemaakt.

2. Ruimtecomplexiteit

Ruimtecomplexiteit O(max)
Stal JA
  • De ruimtecomplexiteit van telsortering is O(max). Hoe groter het scala aan elementen, hoe groter de complexiteit van de ruimte.

Implementatie van telsortering

Laten we nu eens kijken naar de programma's voor het tellen van sorteringen in verschillende programmeertalen.

Programma: Schrijf een programma om telsortering in C-taal te implementeren.

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

Uitvoer

Tellen Sorteren

Dus dat is alles over het artikel. Ik hoop dat het artikel nuttig en informatief voor u zal zijn.

Dit artikel beperkte zich niet alleen tot het algoritme. We hebben ook gesproken over het tellen van de sorteercomplexiteit, de werking en de implementatie in verschillende programmeertalen.