logo

Algoritme d'ordenació de cubs

En aquest article, parlarem de l'algoritme d'ordenació de cubs. Els elements de dades de l'ordenació de cubs es distribueixen en forma de cubs. A les entrevistes de codificació o tècniques per a enginyers de programari, els algorismes d'ordenació es demanen àmpliament. Per tant, és important parlar del tema.

L'ordenació de cubs és un algorisme d'ordenació que separa els elements en diversos grups que es diu que són cubs. Els elements de l'ordenació de cubs es divideixen primer uniformement en grups anomenats cubs, i després s'ordenen mitjançant qualsevol altre algorisme d'ordenació. Després d'això, els elements es recullen de manera ordenada.

El procediment bàsic per dur a terme l'ordenació de cubs es dóna de la següent manera:

  • Primer, dividiu l'interval en un nombre fix de cubs.
  • A continuació, llenceu cada element a la seva galleda adequada.
  • Després d'això, ordena cada cub individualment aplicant un algorisme d'ordenació.
  • I, finalment, concatena tots els cubs ordenats.

Els avantatges de la classificació de cubs són:

  • La classificació de la galleda redueix el núm. de comparacions.
  • És asimptòticament ràpid a causa de la distribució uniforme dels elements.

Les limitacions de la classificació de cubs són:

  • Pot ser o no un algorisme d'ordenació estable.
  • No és útil si tenim una gran matriu perquè augmenta el cost.
  • No és un algorisme d'ordenació in situ, perquè es necessita un espai addicional per ordenar els cubs.

La complexitat millor i mitjana de la classificació de cubs és O(n + k) , i la complexitat del pitjor dels casos de classificació de cubs és O (n2) , on n és el nombre d'elements.

La classificació de cubs s'utilitza habitualment -

  • Amb valors de coma flotant.
  • Quan l'entrada es distribueix uniformement en un interval.

La idea bàsica per realitzar l'ordenació de cubs es dóna de la següent manera:

 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 

Ara, vegem l'algoritme de classificació de cubs.

Algorisme

 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 

Enfocament de dispersió

Podem entendre l'algorisme d'ordenació de la cubeta mitjançant l'enfocament de recollida dispersa. Aquí, els elements donats es dispersen primer en galledes. Després de la dispersió, els elements de cada cub s'ordenen mitjançant un algorisme d'ordenació estable. Finalment, els elements ordenats es reuniran per ordre.

Prenem una matriu no ordenada per entendre el procés d'ordenació de cubs. Serà més fàcil entendre l'ordenació de cubs mitjançant un exemple.

Siguin els elements de la matriu -

classificació de galleda

Ara, creeu cubs amb un interval de 0 a 25. L'interval de cubs és 0-5, 5-10, 10-15, 15-20, 20-25. Els elements s'insereixen als cubs segons la gamma de cubs. Suposem que el valor d'un element és 16, de manera que s'inserirà a la galleda amb l'interval 15-20. De la mateixa manera, cada element de la matriu s'inserirà en conseqüència.

Se sap que aquesta fase és la dispersió d'elements de matriu .

classificació de galleda

Ara, ordenar cada galleda individualment. Els elements de cada cub es poden ordenar mitjançant qualsevol dels algorismes d'ordenació estable.

classificació de galleda

Per fi, reunir els elements ordenats de cada galleda en ordre

classificació de galleda

Ara, la matriu està completament ordenada.

Complexitat de classificació de cubs

Ara, vegem la complexitat temporal de l'ordenació de cubs en el millor dels casos, en el cas mitjà i en el pitjor dels casos. També veurem la complexitat espacial del tipus de cub.

1. Complexitat temporal

Caixa Temps Complexitat
Millor cas O(n + k)
Cas mitjà O(n + k)
Pitjor dels casos O (n2)
    Complexitat del millor cas -Es produeix quan no cal ordenar, és a dir, la matriu ja està ordenada. A l'ordenació de cubs, el millor dels casos es produeix quan els elements es distribueixen uniformement als cubs. La complexitat serà millor si els elements ja estan ordenats als cubs.
    Si utilitzem l'ordenació d'inserció per ordenar els elements del cub, la complexitat general serà lineal, és a dir, O(n + k), on O(n) és per fer els cubs i O(k) és per ordenar els elements del cub. utilitzant algorismes amb complexitat temporal lineal en el millor dels casos.
    La complexitat del temps en el millor dels casos és O(n + k) .Complexitat mitjana del cas -Es produeix quan els elements de la matriu estan en ordre desordenat que no és correctament ascendent i no descendent correctament. L'ordenació de cubs s'executa en el temps lineal, fins i tot quan els elements es distribueixen uniformement. La complexitat mitjana del temps de cas de l'ordenació de cubs és O(n + K) .Complexitat del pitjor cas -En l'ordenació de cubs, el pitjor dels casos es produeix quan els elements són del rang proper de la matriu, per això, s'han de col·locar al mateix cub. Per tant, alguns cubells tenen més nombre d'elements que altres.
    La complexitat empitjorarà quan els elements estiguin en ordre invers.
    La complexitat temporal del pitjor dels casos de classificació de cubs és O (n2) .

2. Complexitat espacial

Complexitat espacial O(n*k)
Estable
  • La complexitat espacial de l'ordenació de cubs és O(n*k).

Implementació de la classificació de cubs

Ara, anem a veure els programes d'ordenació de cubs en diferents llenguatges de programació.

Programa: Escriu un programa per implementar l'ordenació de cubs en llenguatge 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></=>