Dans cet article, nous discuterons de l’algorithme de tri par comptage. Le tri par comptage est une technique de tri basée sur les clés entre des plages spécifiques. Lors des entretiens de codage ou techniques pour les ingénieurs logiciels, les algorithmes de tri sont largement sollicités. Il est donc important d’aborder le sujet.
Cette technique de tri n'effectue pas de tri en comparant les éléments. Il effectue le tri en comptant les objets ayant des valeurs clés distinctes comme le hachage. Après cela, il effectue quelques opérations arithmétiques pour calculer la position d'index de chaque objet dans la séquence de sortie. Le tri par comptage n’est pas utilisé comme algorithme de tri à usage général.
Le tri par comptage est efficace lorsque la plage n'est pas supérieure au nombre d'objets à trier. Il peut être utilisé pour trier les valeurs d'entrée négatives.
Voyons maintenant l'algorithme de tri par comptage.
quelle est la taille de l'écran de mon ordinateur
Algorithme
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
Fonctionnement de l'algorithme de tri par comptage
Voyons maintenant le fonctionnement de l'algorithme de tri par comptage.
Pour comprendre le fonctionnement de l'algorithme de tri par comptage, prenons un tableau non trié. Il sera plus facile de comprendre le tri par comptage via un exemple.
Soit les éléments du tableau -
1. Trouvez l'élément maximum du tableau donné. Laisser maximum être l'élément maximum.
2. Maintenant, initialisez le tableau de longueur maximum + 1 ayant tous les 0 éléments. Ce tableau sera utilisé pour stocker le nombre d'éléments dans le tableau donné.
3. Nous devons maintenant stocker le nombre de chaque élément du tableau à leur index correspondant dans le tableau count.
Le nombre d'un élément sera stocké comme - Supposons que l'élément de tableau '4' apparaisse deux fois, donc le nombre de l'élément 4 est 2. Par conséquent, 2 est stocké au 4èmeposition du tableau de comptage. Si un élément n'est pas présent dans le tableau, placez 0, c'est-à-dire supposons que l'élément « 3 » n'est pas présent dans le tableau, donc 0 sera stocké à 3rdposition.
Maintenant, stockez la somme cumulée de compter éléments du tableau. Cela aidera à placer les éléments au bon index du tableau trié.
De même, le nombre cumulé du tableau de comptage est -
4. Maintenant, trouvez l'index de chaque élément du tableau d'origine
Après avoir placé l'élément à sa place, diminuez son nombre de un. Avant de placer l'élément 2, son compte était de 2, mais après l'avoir placé à sa position correcte, le nouveau compte pour l'élément 2 est de 1.
numpy signifie
De même, après le tri, les éléments du tableau sont -
Maintenant, le tableau est complètement trié.
Comptage de la complexité du tri
Voyons maintenant la complexité temporelle du tri par comptage dans le meilleur des cas, dans le cas moyen et dans le pire des cas. Nous verrons également la complexité spatiale du tri par comptage.
1. Complexité temporelle
Cas | Temps | Complexité |
---|---|---|
Meilleur cas | O(n+k) | |
Cas moyen | O(n+k) | |
Pire cas | O(n+k) |
Dans tous les cas ci-dessus, la complexité temporelle du tri par comptage est la même. C'est parce que l'algorithme passe par n+k fois, quelle que soit la façon dont les éléments sont placés dans le tableau.
changer le nom du répertoire Linux
Le tri par comptage est meilleur que les techniques de tri basées sur la comparaison, car il n'y a pas de comparaison entre les éléments lors du tri par comptage. Mais lorsque les entiers sont très grands, le tri par comptage est mauvais car des tableaux de cette taille doivent être créés.
2. Complexité spatiale
Complexité spatiale | O(maximum) |
Écurie | OUI |
- La complexité spatiale du tri par comptage est O(max). Plus la gamme d’éléments est large, plus la complexité de l’espace est grande.
Implémentation du tri par comptage
Voyons maintenant les programmes de comptage dans différents langages de programmation.
Programme: Écrivez un programme pour implémenter le tri par comptage en langage 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>'; printArray($a, $n); countSort($a,$n); echo ' <br> After sorting array elements are - <br>'; printArray($a, $n); ?> </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'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;></=>
Sortir
Donc, c'est tout à propos de l'article. J'espère que l'article vous sera utile et informatif.
Cet article ne se limitait pas à l’algorithme. Nous avons également discuté du comptage de la complexité des tris, du fonctionnement et de la mise en œuvre dans différents langages de programmation.
=>=>=>=>