logo

Algoritme voor emmersortering

In dit artikel bespreken we het bucket-sort-algoritme. De gegevensitems in de bucket-sortering worden verdeeld in de vorm van buckets. In codeer- of technische interviews voor software-ingenieurs wordt veel gevraagd naar sorteeralgoritmen. Het is dus belangrijk om het onderwerp te bespreken.

Bucket sort is een sorteeralgoritme dat de elementen in meerdere groepen scheidt, zogenaamde buckets. Elementen bij het sorteren van emmers worden eerst uniform verdeeld in groepen die buckets worden genoemd, en vervolgens worden ze gesorteerd door een ander sorteeralgoritme. Daarna worden de elementen gesorteerd verzameld.

De basisprocedure voor het uitvoeren van de emmersortering is als volgt:

  • Verdeel eerst het bereik in een vast aantal buckets.
  • Gooi vervolgens elk element in de juiste emmer.
  • Sorteer daarna elke emmer afzonderlijk door een sorteeralgoritme toe te passen.
  • En voeg ten slotte alle gesorteerde emmers samen.

De voordelen van emmersoort zijn:

  • Emmersoort vermindert het aantal. van vergelijkingen.
  • Het is asymptotisch snel vanwege de uniforme verdeling van elementen.

De beperkingen van het sorteren van emmers zijn -

  • Het kan wel of niet een stabiel sorteeralgoritme zijn.
  • Het is niet nuttig als we een grote array hebben, omdat dit de kosten verhoogt.
  • Het is geen in-place sorteeralgoritme, omdat er wat extra ruimte nodig is om de emmers te sorteren.

De beste en gemiddelde complexiteit van emmersoort is O(n + k) , en de worst-case complexiteit van bucket-sortering is Op2) , waar N is het aantal artikelen.

Emmersoort wordt vaak gebruikt -

  • Met drijvende-kommawaarden.
  • Wanneer de invoer uniform over een bereik wordt verdeeld.

Het basisidee om de bucket-sortering uit te voeren is als volgt:

 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 

Laten we nu eens kijken naar het algoritme voor het sorteren van emmers.

Algoritme

 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 

Verspreid-verzamel-aanpak

We kunnen het Bucket-sorteeralgoritme begrijpen via een scatter-gather-aanpak. Hier worden de gegeven elementen eerst in emmers verspreid. Na verstrooiing worden de elementen in elke emmer gesorteerd met behulp van een stabiel sorteeralgoritme. Eindelijk worden de gesorteerde elementen op volgorde verzameld.

Laten we een ongesorteerde array nemen om het proces van bucketsortering te begrijpen. Het zal gemakkelijker zijn om de emmersoort te begrijpen aan de hand van een voorbeeld.

Laat de elementen van array zijn -

emmer soort

Maak nu buckets met een bereik van 0 tot 25. Het bereik van de buckets is 0-5, 5-10, 10-15, 15-20, 20-25. Afhankelijk van het bereik van de bakken worden elementen in de bakken geplaatst. Stel dat de waarde van een item 16 is, dan wordt het in de bucket geplaatst met een bereik van 15-20. Op dezelfde manier wordt elk item van de array dienovereenkomstig ingevoegd.

Deze fase staat bekend als de verstrooiing van array-elementen .

emmer soort

Nu, soort elke emmer afzonderlijk. De elementen van elke bucket kunnen worden gesorteerd met behulp van een van de stabiele sorteeralgoritmen.

emmer soort

Eindelijk, bijeenkomen de gesorteerde elementen uit elke emmer op volgorde

emmer soort

Nu is de array volledig gesorteerd.

Complexiteit van het sorteren van buckets

Laten we nu eens kijken naar de tijdscomplexiteit van het sorteren van emmers in het beste geval, het gemiddelde geval en in het slechtste geval. We zullen ook de ruimtecomplexiteit van de emmersoort zien.

1. Tijdcomplexiteit

Geval Tijd Complexiteit
Beste geval O(n + k)
Gemiddeld geval O(n + k)
Het slechtste geval Op2)
    Beste case-complexiteit -Het treedt op als er geen sortering nodig is, d.w.z. de array is al gesorteerd. Bij emmersortering treedt het beste geval op wanneer de elementen gelijkmatig over de emmers zijn verdeeld. De complexiteit zal beter zijn als de elementen al in de emmers zijn gesorteerd.
    Als we de invoegsortering gebruiken om de bucket-elementen te sorteren, zal de algehele complexiteit lineair zijn, dat wil zeggen O(n + k), waarbij O(n) is voor het maken van de buckets, en O(k) voor het sorteren van de bucket-elementen. in het beste geval gebruik te maken van algoritmen met lineaire tijdscomplexiteit.
    De beste tijdscomplexiteit van het sorteren van emmers is O(n + k) .Gemiddelde casuscomplexiteit -Het treedt op wanneer de array-elementen zich in een door elkaar geplaatste volgorde bevinden die niet goed oplopend en niet goed aflopend is. Bucket-sortering vindt plaats in de lineaire tijd, zelfs als de elementen uniform verdeeld zijn. De gemiddelde case-time-complexiteit van bucket-sortering is O(n + K) .In het ergste geval complexiteit -Bij het sorteren van emmers treedt het ergste geval op wanneer de elementen zich dichtbij elkaar in de array bevinden, daarom moeten ze in dezelfde emmer worden geplaatst. Sommige buckets bevatten dus meer elementen dan andere.
    De complexiteit wordt erger als de elementen zich in de omgekeerde volgorde bevinden.
    De worst-case tijdscomplexiteit van emmersoort is Op2) .

2. Ruimtecomplexiteit

Ruimtecomplexiteit O(n*k)
Stal JA
  • De ruimtecomplexiteit van bucket-sortering is O(n*k).

Implementatie van emmersoort

Laten we nu de programma's van Bucket Sort in verschillende programmeertalen bekijken.

Programma: Schrijf een programma om bucketsortering in C-taal te implementeren.

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