V tomto článku budeme diskutovať o algoritme triedenia vedra. Dátové položky v triedení segmentov sú distribuované vo forme segmentov. Pri kódovaní alebo technických pohovoroch pre softvérových inžinierov sú často kladené otázky na triediace algoritmy. Preto je dôležité diskutovať o téme.
Zoradenie segmentov je triediaci algoritmus, ktorý rozdeľuje prvky do viacerých skupín, ktoré sa označujú ako segmenty. Prvky v segmentovom triedení sú najprv jednotne rozdelené do skupín nazývaných segmenty a potom sú triedené podľa akéhokoľvek iného triediaceho algoritmu. Potom sa prvky zhromaždia triedeným spôsobom.
Základný postup vykonávania triedenia vedierka je uvedený nasledovne -
- Najprv rozdeľte rozsah do pevného počtu vedier.
- Potom hoďte každý prvok do príslušného vedra.
- Potom zoraďte každý segment jednotlivo pomocou triediaceho algoritmu.
- A nakoniec zreťazte všetky vytriedené vedrá.
Výhody triedenia vedier sú -
- Triedenie vedier znižuje č. porovnaní.
- Je asymptoticky rýchly kvôli rovnomernému rozloženiu prvkov.
Obmedzenia triedenia vedra sú -
- Môže alebo nemusí ísť o stabilný triediaci algoritmus.
- Nie je to užitočné, ak máme veľké pole, pretože to zvyšuje náklady.
- Nie je to miestny triediaci algoritmus, pretože na triedenie vedier je potrebný určitý priestor navyše.
Najlepšia a priemerná zložitosť triedenia vedra je O(n + k) a najhorší prípad zložitosti triedenia segmentov je O(n2) , kde n je počet položiek.
Bežne sa používa triedenie vedier -
- S hodnotami s pohyblivou rádovou čiarkou.
- Keď je vstup distribuovaný rovnomerne v rámci rozsahu.
Základná myšlienka na vykonanie triedenia vedra je daná nasledovne -
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
Teraz sa pozrime na algoritmus triedenia segmentov.
Algoritmus
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
Rozptylový prístup
Algoritmus triedenia Bucket môžeme pochopiť pomocou metódy scatter-gather. Tu sa dané prvky najskôr rozsypú do vedier. Po rozptýlení sa prvky v každom vedre triedia pomocou stabilného triediaceho algoritmu. Nakoniec sa zoradené prvky zhromaždia v poradí.
Zoberme si netriedené pole, aby sme pochopili proces triedenia vedra. Pomocou príkladu bude jednoduchšie pochopiť triedenie vedra.
Nech sú prvky poľa -
Teraz vytvorte segmenty s rozsahom od 0 do 25. Rozsah segmentov je 0-5, 5-10, 10-15, 15-20, 20-25. Prvky sa vkladajú do vedier podľa rozsahu vedier. Predpokladajme, že hodnota položky je 16, takže bude vložená do vedra s rozsahom 15-20. Podobne sa vloží každá položka poľa.
Táto fáza je známa ako rozptyl prvkov poľa .
teraz triediť každé vedro jednotlivo. Prvky každého segmentu je možné triediť pomocou ktoréhokoľvek zo stabilných algoritmov triedenia.
Nakoniec, zhromaždiť zoradené prvky z každého vedra v poradí
Teraz je pole úplne zoradené.
Zložitosť triedenia vedier
Teraz sa pozrime na časovú zložitosť triedenia segmentov v najlepšom prípade, priemernom prípade a v najhoršom prípade. Uvidíme aj priestorovú náročnosť triedenia vedier.
1. Časová zložitosť
Prípad | Čas | Zložitosť |
---|---|---|
Najlepší prípad | O(n + k) | |
Priemerný prípad | O(n + k) | |
V najhoršom prípade | O(n2) |
Ak použijeme triedenie vloženia na triedenie prvkov vedra, celková zložitosť bude lineárna, t. j. O(n + k), kde O(n) je na vytváranie vedier a O(k) je na triedenie prvkov vedra. v najlepšom prípade pomocou algoritmov s lineárnou časovou zložitosťou.
Najlepšia časová zložitosť triedenia vedra je O(n + k) .
Zložitosť sa zhorší, keď sú prvky v opačnom poradí.
Najhorší prípad časovej zložitosti triedenia vedra je O(n2) .
2. Zložitosť priestoru
Priestorová zložitosť | O(n*k) |
Stabilný | ÁNO |
- Priestorová zložitosť triedenia segmentov je O(n*k).
Implementácia triedenia vedier
Teraz sa pozrime na programy triedenia bucketov v rôznych programovacích jazykoch.
Program: Napíšte program na implementáciu triedenia segmentov v jazyku 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'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></=>=>=>=>