Le tri comptage est un algorithme de tri non comparatif. Il trie un tableau en comptant les occurrences de chaque élément unique. Il effectue un hachage partiel du comptage des éléments uniques et effectue ensuite des calculs pour trouver l’indice de chaque élément dans le tableau final trié. C’est un algorithme assez rapide mais qui ne convient pas aux grands ensembles de données. Il est utilisé comme sous-programme dans tri par base.
++ cCopy#include<iostream>
using namespace std;constint N =10;intmaxm(int arr[],int n){int max = arr[0];for(int i =1; i < n; i++){if(arr[i]> max){
max = arr[i];}}return max;}intminm(int arr[],int n){int min = arr[0];for(int i =1; i < n; i++){if(arr[i]< min){
min = arr[i];}}return min;}voidcountingSort(int arr[],int n){int min =minm(arr, n);int max =maxm(arr, n);int range = max - min +1;int count[range]={};int output[n];for(int i =0; i < n; i++) count[arr[i]- min]++;for(int i =1; i < range; i++) count[i]+= count[i -1];for(int i = n -1; i >=0; i--){
output[count[arr[i]- min]-1]= arr[i];
count[arr[i]- min]--;}for(int i =0; i < n; i++) arr[i]= output[i];}intmain(){int n =7;int arr[7]={3,5,1,1,4,2,1};
cout <<"Input arr: ";for(int i =0; i < n; i++){
cout << arr[i]<<" ";}
cout <<"\n";countingSort(arr, n);// Sort elements in ascending order
cout <<"Output arr: ";for(int i =0; i < n; i++){
cout << arr[i]<<" ";}
cout <<"\n";}
Cette mise en œuvre fonctionne également pour les chiffres négatifs.
Le tri comptage itére deux fois tous les éléments n et une fois le tableau count. Il a donc une complexité temporelle de O(n + b) où b est la plage d’entrée. Comme b est souvent petit, la complexité temporelle du tri de comptage est de l’ordre de [Big Theta] : O(n).
Pire cas
La complexité temporelle dans le pire des cas est [Big O] : O(n).
Meilleur cas
Le meilleur exemple de complexité temporelle est [Big Omega] : O(n). C’est la même chose que la complexité temporelle dans le pire des cas.
La complexité spatiale pour l’algorithme de tri par comptage est O(n+b), où b est la plage d’entrée. Elle provient des tableaux count et output. Parfois, b peut être plus grand que n, mais si b est petit, on dit que la complexité temporelle est de O(n).
Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.