logo

Algoritmo di ordinamento del bucket

In questo articolo discuteremo dell'algoritmo di ordinamento dei bucket. Gli elementi di dati nell'ordinamento per bucket vengono distribuiti sotto forma di bucket. Nelle interviste di codifica o tecniche per ingegneri del software, gli algoritmi di ordinamento sono ampiamente richiesti. Quindi è importante discutere l’argomento.

L'ordinamento dei bucket è un algoritmo di ordinamento che separa gli elementi in più gruppi detti bucket. Gli elementi nell'ordinamento per contenitori vengono prima divisi uniformemente in gruppi chiamati contenitori, quindi vengono ordinati mediante qualsiasi altro algoritmo di ordinamento. Successivamente, gli elementi vengono raccolti in modo ordinato.

La procedura di base per eseguire l'ordinamento del bucket è la seguente:

  • Innanzitutto, suddividi l'intervallo in un numero fisso di bucket.
  • Quindi, getta ogni elemento nel secchio appropriato.
  • Successivamente, ordina ciascun contenitore individualmente applicando un algoritmo di ordinamento.
  • E infine, concatena tutti i bucket ordinati.

I vantaggi dell'ordinamento a secchio sono:

  • L'ordinamento dei secchi riduce il n. di confronti.
  • È asintoticamente veloce a causa della distribuzione uniforme degli elementi.

Le limitazioni dell'ordinamento dei bucket sono:

  • Potrebbe essere o meno un algoritmo di ordinamento stabile.
  • Non è utile se abbiamo un array di grandi dimensioni perché aumenta il costo.
  • Non è un algoritmo di ordinamento sul posto, poiché è necessario spazio aggiuntivo per ordinare i contenitori.

La complessità migliore e nel caso medio dell'ordinamento del bucket è O(n+k) , e la complessità dell'ordinamento del bucket nel caso peggiore è SU2) , Dove N è il numero di elementi.

L'ordinamento per bucket è comunemente utilizzato:

  • Con valori in virgola mobile.
  • Quando l'input è distribuito uniformemente su un intervallo.

L'idea di base per eseguire l'ordinamento del bucket è data come segue:

 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 

Ora vediamo l'algoritmo del bucket sort.

Algoritmo

 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 

Approccio di raccolta e dispersione

Possiamo comprendere l'algoritmo di ordinamento del bucket tramite l'approccio scatter-gather. Qui gli elementi forniti vengono prima sparsi in secchi. Dopo la dispersione, gli elementi in ciascun contenitore vengono ordinati utilizzando un algoritmo di ordinamento stabile. Alla fine, gli elementi ordinati verranno raccolti in ordine.

Prendiamo un array non ordinato per comprendere il processo di ordinamento del bucket. Sarà più semplice comprendere l'ordinamento dei bucket tramite un esempio.

Lascia che gli elementi dell'array siano -

ordinamento del secchio

Ora crea bucket con un intervallo compreso tra 0 e 25. Gli intervalli di bucket sono 0-5, 5-10, 10-15, 15-20, 20-25. Gli elementi vengono inseriti nei contenitori in base alla gamma dei contenitori. Supponiamo che il valore di un articolo sia 16, quindi verrà inserito nel bucket con intervallo 15-20. Allo stesso modo, ogni elemento dell'array verrà inserito di conseguenza.

Questa fase è nota per essere la dispersione degli elementi dell'array .

ordinamento del secchio

Ora, ordinare ogni secchio individualmente. Gli elementi di ciascun bucket possono essere ordinati utilizzando uno qualsiasi degli algoritmi di ordinamento stabili.

ordinamento del secchio

Infine, raccogliere gli elementi ordinati da ciascun bucket in ordine

ordinamento del secchio

Ora l'array è completamente ordinato.

Complessità dell'ordinamento dei bucket

Ora, vediamo la complessità temporale dell'ordinamento dei bucket nel caso migliore, nel caso medio e nel caso peggiore. Vedremo anche la complessità spaziale del bucket sort.

1. Complessità temporale

Caso Tempo Complessità
Caso migliore O(n+k)
Caso medio O(n+k)
Caso peggiore SU2)
    Migliore complessità del caso -Si verifica quando non è richiesto alcun ordinamento, ovvero l'array è già ordinato. Nell'ordinamento per bucket, il caso migliore si verifica quando gli elementi sono distribuiti uniformemente nei bucket. La complessità sarà migliore se gli elementi sono già ordinati nei contenitori.
    Se utilizziamo l'ordinamento per inserimento per ordinare gli elementi del bucket, la complessità complessiva sarà lineare, ovvero O(n + k), dove O(n) serve per creare i bucket e O(k) serve per ordinare gli elementi del bucket utilizzando algoritmi con complessità temporale lineare nel migliore dei casi.
    La complessità temporale del bucket sort nel migliore dei casi è O(n+k) .Complessità media del caso -Si verifica quando gli elementi dell'array sono in ordine confuso, ovvero non correttamente ascendente e non correttamente discendente. L'ordinamento dei bucket viene eseguito in un tempo lineare, anche quando gli elementi sono distribuiti uniformemente. La complessità media del tempo di caso dell'ordinamento del bucket è O(n+K) .Complessità del caso peggiore -Nell'ordinamento per bucket, il caso peggiore si verifica quando gli elementi si trovano nella distanza ravvicinata nell'array, per questo motivo devono essere posizionati nello stesso bucket. Pertanto, alcuni bucket hanno un numero maggiore di elementi rispetto ad altri.
    La complessità peggiorerà quando gli elementi saranno nell’ordine inverso.
    La complessità temporale del bucket sort nel caso peggiore è SU2) .

2. Complessità spaziale

Complessità spaziale O(n*k)
Stabile
  • La complessità spaziale del bucket sort è O(n*k).

Implementazione del bucket sort

Vediamo ora i programmi di bucket sort nei diversi linguaggi di programmazione.

Programma: Scrivere un programma per implementare il bucket sort in linguaggio 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></=>