logo

Algorithme de tri par comptage

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 -

Tri par comptage

1. Trouvez l'élément maximum du tableau donné. Laisser maximum être l'élément maximum.

Tri par comptage

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é.

Tri par comptage

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.

Tri par comptage
Tri par comptage

Maintenant, stockez la somme cumulée de compter éléments du tableau. Cela aidera à placer les éléments au bon index du tableau trié.

Tri par comptage
Tri par comptage

De même, le nombre cumulé du tableau de comptage est -

Tri par comptage

4. Maintenant, trouvez l'index de chaque élément du tableau d'origine

Tri par comptage

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
Tri par comptage

De même, après le tri, les éléments du tableau sont -

Tri par comptage

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)
    Complexité du meilleur cas -Cela se produit lorsqu'aucun tri n'est requis, c'est-à-dire que le tableau est déjà trié. La complexité temporelle dans le meilleur des cas du tri par comptage est O(n+k) .Complexité moyenne des cas -Cela se produit lorsque les éléments du tableau sont dans un ordre confus qui n'est pas correctement ascendant ni correctement descendant. La complexité moyenne du temps de traitement du tri par comptage est O(n+k) .Pire complexité des cas -Cela se produit lorsque les éléments du tableau doivent être triés dans l’ordre inverse. Cela signifie que vous devez trier les éléments du tableau par ordre croissant, mais que ses éléments sont par ordre décroissant. La complexité temporelle du tri par comptage dans le pire des cas est 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>&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;></=>

Sortir

Tri par comptage

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.