logo

Algorithme de tri par seau

Dans cet article, nous aborderons l’algorithme de tri par compartiment. Les éléments de données du tri par compartiment sont distribués sous forme de compartiments. 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.

Le tri par compartiment est un algorithme de tri qui sépare les éléments en plusieurs groupes appelés compartiments. Les éléments du tri par compartiment sont d'abord divisés uniformément en groupes appelés compartiments, puis triés par tout autre algorithme de tri. Après cela, les éléments sont rassemblés de manière triée.

La procédure de base pour effectuer le tri par compartiment est la suivante :

  • Tout d’abord, divisez la plage en un nombre fixe de compartiments.
  • Ensuite, jetez chaque élément dans son seau approprié.
  • Après cela, triez chaque compartiment individuellement en appliquant un algorithme de tri.
  • Et enfin, concaténez tous les buckets triés.

Les avantages du tri par seau sont :

  • Le tri par seau réduit le nombre de personnes. de comparaisons.
  • Il est asymptotiquement rapide en raison de la distribution uniforme des éléments.

Les limites du tri par compartiment sont :

  • Il peut s'agir ou non d'un algorithme de tri stable.
  • Ce n’est pas utile si nous avons un grand réseau car cela augmente le coût.
  • Il ne s'agit pas d'un algorithme de tri sur place, car un espace supplémentaire est nécessaire pour trier les compartiments.

La complexité optimale et moyenne du tri par compartiment est O(n+k) , et la complexité du tri par compartiment dans le pire des cas est Sur2) , où n est le nombre d'éléments.

Le tri par seau est couramment utilisé -

  • Avec des valeurs à virgule flottante.
  • Lorsque l’entrée est répartie uniformément sur une plage.

L'idée de base pour effectuer le tri par compartiment est donnée comme suit :

 bucketSort(a[], n) 1. Create 'n' empty buckets 2. Do for each array element a[i] 2.1. Put array elements into buckets, i.e. insert a[i] into bucket[n*a[i]] 3. Sort the elements of individual buckets by using the insertion sort. 4. At last, gather or concatenate the sorted buckets. End bucketSort 

Voyons maintenant l'algorithme de tri par bucket.

Algorithme

 Bucket Sort(A[]) 1. Let B[0....n-1] be a new array 2. n=length[A] 3. for i=0 to n-1 4. make B[i] an empty list 5. for i=1 to n 6. do insert A[i] into list B[n a[i]] 7. for i=0 to n-1 8. do sort list B[i] with insertion-sort 9. Concatenate lists B[0], B[1],........, B[n-1] together in order End 

Approche de dispersion

Nous pouvons comprendre l'algorithme de tri Bucket via une approche scatter-gather. Ici, les éléments donnés sont d'abord dispersés dans des compartiments. Après diffusion, les éléments de chaque compartiment sont triés à l'aide d'un algorithme de tri stable. Enfin, les éléments triés seront rassemblés dans l'ordre.

Prenons un tableau non trié pour comprendre le processus de tri par bucket. Il sera plus facile de comprendre le tri par bucket via un exemple.

Soit les éléments du tableau -

tri au seau

Maintenant, créez des compartiments avec une plage de 0 à 25. Les plages de compartiments sont 0-5, 5-10, 10-15, 15-20, 20-25. Les éléments sont insérés dans les buckets en fonction de la plage du bucket. Supposons que la valeur d'un élément soit de 16, il sera donc inséré dans le compartiment avec une plage comprise entre 15 et 20. De même, chaque élément du tableau sera inséré en conséquence.

Cette phase est connue pour être la diffusion des éléments du tableau .

tri au seau

Maintenant, trier chaque seau individuellement. Les éléments de chaque compartiment peuvent être triés à l'aide de l'un des algorithmes de tri stables.

tri au seau

Enfin, rassembler les éléments triés de chaque compartiment dans l'ordre

tri au seau

Maintenant, le tableau est complètement trié.

Complexité du tri par compartiment

Voyons maintenant la complexité temporelle du tri par compartiment dans le meilleur des cas, le cas moyen et le pire des cas. Nous verrons également la complexité spatiale du tri par bucket.

1. Complexité temporelle

Cas Temps Complexité
Meilleur cas O(n+k)
Cas moyen O(n+k)
Pire cas Sur2)
    Complexité du meilleur cas -Cela se produit lorsqu'aucun tri n'est requis, c'est-à-dire que le tableau est déjà trié. Dans le tri par compartiments, le meilleur des cas se produit lorsque les éléments sont uniformément répartis dans les compartiments. La complexité sera meilleure si les éléments sont déjà triés dans les buckets.
    Si nous utilisons le tri par insertion pour trier les éléments du bucket, la complexité globale sera linéaire, c'est-à-dire O(n + k), où O(n) sert à créer les buckets et O(k) sert à trier les éléments du bucket. en utilisant des algorithmes avec une complexité temporelle linéaire dans le meilleur des cas.
    Dans le meilleur des cas, la complexité temporelle du tri par compartiment 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. Le tri par compartiment s'exécute dans le temps linéaire, même lorsque les éléments sont uniformément répartis. La complexité moyenne du temps de traitement du tri par compartiment est O(n+K) .Pire complexité des cas -Dans le tri par compartiment, le pire des cas se produit lorsque les éléments sont proches du tableau, de ce fait, ils doivent être placés dans le même compartiment. Ainsi, certains compartiments contiennent plus d’éléments que d’autres.
    La complexité s’aggravera lorsque les éléments seront dans l’ordre inverse.
    La complexité temporelle dans le pire des cas du tri par compartiment est Sur2) .

2. Complexité spatiale

Complexité spatiale O(n*k)
Écurie OUI
  • La complexité spatiale du tri par compartiment est O(n*k).

Implémentation du tri par buckets

Voyons maintenant les programmes de tri par buckets dans différents langages de programmation.

Programme: Écrivez un programme pour implémenter le tri par buckets en langage C.

 #include int getMax(int a[], int n) // function to get maximum element from the given array { int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[], int n) // function to implement bucket sort { int max = getMax(a, n); //max is the maximum element of array int bucket[max], i; for (int i = 0; i <= max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[], int n) function to print array elements ++i) printf('%d ', a[i]); main() a[]="{54," 12, 84, 57, 69, 41, 9, 5}; n="sizeof(a)" sizeof(a[0]); is the size of printf('before sorting are - 
'); printarr(a, n); bucket(a, printf('
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/04/bucket-sort-algorithm-5.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in C++.</p> <pre> #include using namespace std; int getMax(int a[], int n) // function to get maximum element from the given array { int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[], int n) // function to implement bucket sort { int max = getMax(a, n); //max is the maximum element of array int bucket[max], i; for (int i = 0; i <= max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[], int n) function to print array elements ++i) cout< <a[i]<<' '; main() a[]="{34," 42, 74, 57, 99, 84, 9, 5}; n="sizeof(a)" sizeof(a[0]); is the size of cout<<'before sorting are - 
'; printarr(a, n); bucket(a, cout<<'
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/04/bucket-sort-algorithm-6.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in C#.</p> <pre> using System; class Bucket { static int getMax(int[] a) // function to get maximum element from the given array { int n = a.Length; int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } static void bucket(int[] a) // function to implement bucket sort { int n = a.Length; int max = getMax(a); //max is the maximum element of array int[] bucket = new int[max+1]; for (int i = 0; i <= 10 max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; static void printarr(int[] a) * function to print the array int i; n="a.Length;" (i="0;" console.write(a[i] + ' '); main() int[] a="{" 95, 50, 45, 15, 20, }; console.write('before sorting elements are - 
'); printarr(a); bucket(a); 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/04/bucket-sort-algorithm-7.webp" alt="bucket sort"> <p> <strong>Program:</strong> Write a program to implement bucket sort in Java.</p> <pre> public class Bucket { int getMax(int a[]) // function to get maximum element from the given array { int n = a.length; int max = a[0]; for (int i = 1; i max) max = a[i]; return max; } void bucket(int a[]) // function to implement bucket sort { int n = a.length; int max = getMax(a); //max is the maximum element of array int bucket[] = new int[max+1]; for (int i = 0; i <= 9 max; i++) { bucket[i]="0;" } for (int i="0;" < n; bucket[a[i]]++; j="0;" 0) a[j++]="i;" bucket[i]--; void printarr(int a[]) * function to print the array int i; n="a.length;" (i="0;" system.out.print(a[i] + ' '); public static main(string[] args) a[]="{" 90, 40, 5, 15, 30, }; bucket b1="new" bucket(); system.out.print('before sorting elements are - 
'); b1.printarr(a); b1.bucket(a); system.out.print('
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/04/bucket-sort-algorithm-8.webp" alt="bucket 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. Along with the algorithm, we have also discussed the bucket sort complexity, working, and implementation in different programming languages.</p> <hr></=></pre></=></pre></=></pre></=>