V tomto článku budeme diskutovat o algoritmu třídění bucket. Datové položky v třídění segmentů jsou distribuovány ve formě segmentů. Při kódování nebo technických pohovorech pro softwarové inženýry jsou často kladeny dotazy na třídicí algoritmy. Je tedy důležité o tématu diskutovat.
Bucket sort je třídicí algoritmus, který rozděluje prvky do několika skupin, které se nazývají segmenty. Prvky v segmentovém třídění jsou nejprve jednotně rozděleny do skupin nazývaných segmenty a poté jsou seřazeny podle jakéhokoli jiného třídícího algoritmu. Poté jsou prvky shromážděny tříděným způsobem.
Základní postup provádění třídění lopaty je dán následovně -
- Nejprve rozdělte rozsah do pevného počtu segmentů.
- Poté hoďte každý prvek do příslušného kbelíku.
- Poté seřaďte každý segment jednotlivě pomocí třídícího algoritmu.
- A nakonec spojte všechny roztříděné kbelíky.
Výhody kbelíkového třídění jsou -
- Bucket sort snižuje ne. srovnání.
- Je asymptoticky rychlý díky rovnoměrnému rozložení prvků.
Omezení třídění segmentů jsou -
- Může nebo nemusí jít o stabilní třídicí algoritmus.
- Není užitečné, pokud máme velké pole, protože to zvyšuje náklady.
- Nejedná se o místní třídicí algoritmus, protože k setřídění segmentů je potřeba určitý prostor navíc.
Nejlepší a průměrná složitost třídění segmentů je O(n + k) , a nejhorší případ složitosti třídění segmentů je Na2) , kde n je počet položek.
Běžně se používá bucket sort -
- S plovoucí desetinnou čárkou.
- Když je vstup distribuován rovnoměrně v rozsahu.
Základní myšlenka k provedení třídění lopatek je dána následovně -
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
Nyní se podívejme na algoritmus třídění segmentů.
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ý přístup
Algoritmus třídění Bucket můžeme porozumět pomocí metody scatter-gather. Zde se dané prvky nejprve rozsypou do kbelíků. Po rozptýlení jsou prvky v každém kbelíku seřazeny pomocí stabilního třídícího algoritmu. Nakonec budou setříděné prvky shromážděny v pořadí.
Vezměme si netříděné pole, abychom porozuměli procesu třídění segmentů. Uspořádání lopaty bude snazší pochopit na příkladu.
Nechť prvky pole jsou -
Nyní vytvořte segmenty s rozsahem od 0 do 25. Rozsah segmentů je 0-5, 5-10, 10-15, 15-20, 20-25. Prvky se vkládají do lopatek podle rozsahu lopatek. Předpokládejme, že hodnota položky je 16, takže bude vložena do segmentu s rozsahem 15-20. Podobně se podle toho vloží každá položka pole.
Tato fáze je známá jako rozptyl prvků pole .
Nyní, seřadit každý kbelík samostatně. Prvky každého segmentu lze třídit pomocí libovolného ze stabilních třídicích algoritmů.
Nakonec, shromáždit seřazené prvky z každého kbelíku v pořadí
Nyní je pole kompletně seřazeno.
Složitost řazení lopatek
Nyní se podívejme na časovou složitost třídění segmentů v nejlepším případě, průměrném případě a v nejhorším případě. Uvidíme také prostorovou složitost bucket sort.
1. Časová složitost
Pouzdro | Čas | Složitost |
---|---|---|
Nejlepší případ | O(n + k) | |
Průměrný případ | O(n + k) | |
Nejhorší případ | Na2) |
Pokud k řazení prvků segmentu použijeme řazení vložení, bude celková složitost lineární, tj. O(n + k), kde O(n) je pro vytváření segmentů a O(k) je pro řazení prvků segmentu. v nejlepším případě pomocí algoritmů s lineární časovou složitostí.
Nejlepší časová složitost třídění segmentů je O(n + k) .
Složitost se zhorší, když budou prvky v opačném pořadí.
Nejhorší případ časové složitosti třídění bucket je Na2) .
2. Prostorová složitost
Vesmírná složitost | O(n*k) |
Stabilní | ANO |
- Prostorová složitost segmentového třídění je O(n*k).
Implementace bucket sort
Nyní se podívejme na programy třídění segmentů v různých programovacích jazycích.
Program: Napište program pro implementaci třídění segmentů v jazyce 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></=>=>=>=>