logo

Zählsortieralgorithmus

In diesem Artikel besprechen wir den Zählsortieralgorithmus. Zählsortierung ist eine Sortiertechnik, die auf den Schlüsseln zwischen bestimmten Bereichen basiert. In Codierungs- oder technischen Interviews für Softwareentwickler werden Sortieralgorithmen häufig gefragt. Daher ist es wichtig, das Thema zu diskutieren.

Diese Sortiertechnik führt keine Sortierung durch Vergleichen von Elementen durch. Es führt eine Sortierung durch, indem es Objekte zählt, die unterschiedliche Schlüsselwerte haben, wie z. B. Hashing. Anschließend werden einige arithmetische Operationen ausgeführt, um die Indexposition jedes Objekts in der Ausgabesequenz zu berechnen. Die Zählsortierung wird nicht als Allzweck-Sortieralgorithmus verwendet.

Die Zählsortierung ist wirksam, wenn der Bereich nicht größer ist als die Anzahl der zu sortierenden Objekte. Es kann verwendet werden, um die negativen Eingabewerte zu sortieren.

Sehen wir uns nun den Algorithmus zum Zählen und Sortieren an.

Algorithmus

 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 

Funktionsweise des Zählsortieralgorithmus

Sehen wir uns nun die Funktionsweise des Zählsortierungsalgorithmus an.

TCP-IP-Modell

Um die Funktionsweise des zählenden Sortieralgorithmus zu verstehen, nehmen wir ein unsortiertes Array. Anhand eines Beispiels lässt sich die Zählsortierung leichter verstehen.

Die Elemente des Arrays seien -

Zählsortierung

1. Finden Sie das maximale Element aus dem angegebenen Array. Lassen max sei das maximale Element.

array.sort in Java
Zählsortierung

2. Initialisieren Sie nun das Array mit der Länge max + 1 alle 0 Elemente haben. Dieses Array wird verwendet, um die Anzahl der Elemente im angegebenen Array zu speichern.

Zählsortierung

3. Jetzt müssen wir die Anzahl jedes Array-Elements an seinem entsprechenden Index im Count-Array speichern.

Die Anzahl eines Elements wird wie folgt gespeichert: Angenommen, das Array-Element „4“ erscheint zweimal, sodass die Anzahl von Element 4 2 beträgt. Daher wird 2 bei 4 gespeichertThPosition des Zählarrays. Wenn ein Element im Array nicht vorhanden ist, platzieren Sie 0, d. h. angenommen, Element „3“ ist im Array nicht vorhanden, sodass 0 unter 3 gespeichert wirdrdPosition.

Fizzbuzz Java
Zählsortierung
Zählsortierung

Speichern Sie nun die kumulative Summe von zählen Array-Elemente. Es hilft, die Elemente am richtigen Index des sortierten Arrays zu platzieren.

Zählsortierung
Zählsortierung

Ebenso ist die kumulative Anzahl des Zählarrays -

Zählsortierung

4. Suchen Sie nun den Index jedes Elements des ursprünglichen Arrays

Zählsortierung

Nachdem Sie das Element an seiner Stelle platziert haben, verringern Sie seine Anzahl um eins. Bevor Element 2 platziert wurde, betrug seine Anzahl 2, aber nachdem es an der richtigen Position platziert wurde, beträgt die neue Anzahl für Element 2 1.

Zählsortierung

Ebenso lauten die Array-Elemente nach dem Sortieren:

Zählsortierung

Jetzt ist das Array vollständig sortiert.

Websites wie bedpage

Sortierkomplexität zählen

Sehen wir uns nun die zeitliche Komplexität der Zählsortierung im besten Fall, im Durchschnittsfall und im schlechtesten Fall an. Wir werden auch die räumliche Komplexität der Zählsortierung sehen.

1. Zeitkomplexität

Fall Zeit Komplexität
I'm besten fall O(n + k)
Durchschnittlicher Fall O(n + k)
Schlimmsten Fall O(n + k)
    Beste Fallkomplexität -Dies geschieht, wenn keine Sortierung erforderlich ist, d. h. das Array bereits sortiert ist. Die Zeitkomplexität der Zählsortierung beträgt im besten Fall O(n + k) .Durchschnittliche Fallkomplexität -Es tritt auf, wenn die Array-Elemente in einer durcheinandergebrachten Reihenfolge vorliegen, die nicht richtig aufsteigend und nicht richtig absteigend ist. Die durchschnittliche Fallzeitkomplexität der Zählsortierung beträgt O(n + k) .Worst-Case-Komplexität -Es tritt auf, wenn die Array-Elemente in umgekehrter Reihenfolge sortiert werden müssen. Angenommen, Sie müssen die Array-Elemente in aufsteigender Reihenfolge sortieren, die Elemente jedoch in absteigender Reihenfolge. Die Zeitkomplexität der Zählsortierung im schlimmsten Fall beträgt O(n + k) .

In allen oben genannten Fällen ist die zeitliche Komplexität der Zählsortierung gleich. Dies liegt daran, dass der Algorithmus durchläuft n+k unabhängig davon, wie die Elemente im Array platziert werden.

Die Zählsortierung ist besser als die vergleichsbasierten Sortiertechniken, da es bei der Zählsortierung keinen Vergleich zwischen Elementen gibt. Wenn die Ganzzahlen jedoch sehr groß sind, ist die Zählsortierung schlecht, da Arrays dieser Größe erstellt werden müssen.

2. Raumkomplexität

Weltraumkomplexität O(max)
Stabil JA
  • Die räumliche Komplexität der Zählsortierung beträgt O(max). Je größer der Bereich der Elemente ist, desto größer ist die Raumkomplexität.

Implementierung der Zählsortierung

Sehen wir uns nun die Zählprogramme in verschiedenen Programmiersprachen an.

Programm: Schreiben Sie ein Programm zur Implementierung der Zählsortierung in der Sprache C.

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

Ausgabe

Zählsortierung

Das ist also alles über den Artikel. Ich hoffe, der Artikel ist hilfreich und informativ für Sie.

Shehzad Poonawala

Dieser Artikel beschränkte sich nicht nur auf den Algorithmus. Wir haben auch die Komplexität der Zählung, die Funktionsweise und die Implementierung in verschiedenen Programmiersprachen besprochen.