V tem članku bomo razpravljali o algoritmu za razvrščanje vedra. Podatkovne postavke v razvrščanju veder so porazdeljene v obliki veder. V kodirnih ali tehničnih intervjujih za programske inženirje se veliko sprašuje o algoritmih razvrščanja. Zato je pomembno razpravljati o temi.
Bucket sort je algoritem za razvrščanje, ki loči elemente v več skupin, imenovanih vedra. Elementi pri razvrščanju po vedrih so najprej enotno razdeljeni v skupine, imenovane vedra, nato pa so razvrščeni s katerim koli drugim algoritmom za razvrščanje. Po tem se elementi zberejo razvrščeno.
Osnovni postopek izvajanja razvrščanja vedra je podan na naslednji način -
- Najprej razdelite obseg na določeno število veder.
- Nato vsak element vrzite v ustrezno vedro.
- Nato razvrstite vsako vedro posebej z uporabo algoritma za razvrščanje.
- In končno združite vsa razvrščena vedra.
Prednosti sortiranja z vedro so:
- Bucket sort zmanjša št. primerjav.
- Je asimptotično hiter zaradi enakomerne porazdelitve elementov.
Omejitve razvrščanja vedra so -
- Lahko je stabilen algoritem za razvrščanje ali pa tudi ne.
- Ni uporabno, če imamo veliko polje, ker poveča stroške.
- To ni algoritem za razvrščanje na mestu, ker je za razvrščanje veder potrebno nekaj dodatnega prostora.
Najboljša in povprečna zapletenost razvrščanja vedra je O(n + k) , in najslabša zapletenost razvrščanja vedra je O(n2) , kje n je število predmetov.
Običajno se uporablja vrsta vedra -
- Z vrednostmi v plavajoči vejici.
- Ko je vnos enakomerno porazdeljen po območju.
Osnovna ideja za izvedbo razvrščanja vedra je podana na naslednji način -
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
Zdaj pa poglejmo algoritem razvrščanja vedra.
Algoritem
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
Pristop razpršitve
Algoritem razvrščanja Bucket lahko razumemo s pristopom razpršenega zbiranja. Tukaj so dani elementi najprej razpršeni v vedra. Po razpršitvi so elementi v vsakem vedru razvrščeni z uporabo stabilnega algoritma za razvrščanje. Končno bodo razvrščeni elementi zbrani po vrstnem redu.
Vzemimo nerazvrščeno matriko, da razumemo postopek razvrščanja vedra. Razvrščanje vedra bo lažje razumeti na primeru.
Naj so elementi matrike -
Zdaj ustvarite vedra z razponom od 0 do 25. Razponi veder so 0-5, 5-10, 10-15, 15-20, 20-25. Elementi se vstavljajo v vedra glede na obseg žlic. Recimo, da je vrednost predmeta 16, tako da bo vstavljen v vedro z obsegom 15–20. Podobno se bo vsak element matrike ustrezno vstavil.
Ta faza je znana kot razpršenost elementov niza .
zdaj, vrsta vsako vedro posebej. Elemente vsakega vedra je mogoče razvrstiti z uporabo katerega koli od stabilnih algoritmov za razvrščanje.
Končno, zbrati razvrščene elemente iz vsakega vedra po vrstnem redu
Sedaj je niz popolnoma urejen.
Zapletenost razvrščanja vedra
Zdaj pa poglejmo časovno zahtevnost razvrščanja vedra v najboljšem, povprečnem primeru in v najslabšem primeru. Videli bomo tudi prostorsko zapletenost vrste vedra.
1. Časovna zapletenost
Ovitek | Čas | Kompleksnost |
---|---|---|
Najboljši primer | O(n + k) | |
Povprečen primer | O(n + k) | |
V najslabšem primeru | O(n2) |
Če za razvrščanje elementov vedra uporabimo razvrščanje z vstavljanjem, bo celotna kompleksnost linearna, tj. O(n + k), kjer je O(n) za izdelavo veder, O(k) pa za razvrščanje elementov vedra z uporabo algoritmov z linearno časovno kompleksnostjo v najboljšem primeru.
Najboljši primer časovne zapletenosti razvrščanja vedra je O(n + k) .
Kompleksnost se bo poslabšala, če bodo elementi v obratnem vrstnem redu.
Najslabša časovna zapletenost razvrščanja vedra je O(n2) .
2. Kompleksnost prostora
Kompleksnost prostora | O(n*k) |
Stabilen | DA |
- Prostorska kompleksnost razvrščanja vedra je O(n*k).
Izvedba bucket sort
Zdaj pa si oglejmo programe za razvrščanje veder v različnih programskih jezikih.
Program: Napišite program za implementacijo razvrščanja vedra v jeziku 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></=>=>=>=>