logo

Алгоритам за сортирање кашике

У овом чланку ћемо разговарати о алгоритму сортирања кантом. Ставке података у сортирању буцкета се дистрибуирају у облику корпи. У кодирању или техничким интервјуима за софтверске инжењере, алгоритми за сортирање се често постављају. Дакле, важно је разговарати о теми.

Буцкет сорт је алгоритам за сортирање који раздваја елементе у више група за које се каже да су корпе. Елементи у буцкет сортирању се прво равномерно деле у групе које се називају буцкет, а затим се сортирају било којим другим алгоритмом за сортирање. Након тога, елементи се сакупљају на сортиран начин.

Основни поступак извођења сортирања кантом је дат на следећи начин -

  • Прво, поделите опсег на фиксни број корпи.
  • Затим баците сваки елемент у одговарајућу канту.
  • Након тога, сортирајте сваку канту појединачно применом алгоритма за сортирање.
  • И на крају, спојите све сортиране канте.

Предности сортирања кантом су -

  • Сортирање кантом смањује бр. поређења.
  • Асимптотски је брз због уједначене расподеле елемената.

Ограничења сортирања кантом су -

  • Може, али и не мора бити стабилан алгоритам за сортирање.
  • Није корисно ако имамо велики низ јер повећава цену.
  • То није алгоритам за сортирање на месту, јер је потребан додатни простор за сортирање корпи.

Најбољи и просечни случај сложености сортирања је О(н + к) , а у најгорем случају сложеност сортирања је На2) , где н је број ставки.

Обично се користи сортирање канте -

  • Са вредностима са покретним зарезом.
  • Када је улаз равномерно распоређен у опсегу.

Основна идеја за извођење сортирања кантом је дата на следећи начин -

 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 

Сада, хајде да видимо алгоритам сортирања кантом.

Алгоритам

 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 

Сцаттер-гатхер приступ

Можемо да разумемо алгоритам сортирања буцкет-а помоћу приступа распршивања. Овде се дати елементи прво разбацују у канте. Након расипања, елементи у свакој канти се сортирају помоћу стабилног алгоритма за сортирање. Коначно, сортирани елементи ће бити сакупљени по реду.

Узмимо несортирани низ да бисмо разумели процес сортирања кантом. Биће лакше разумети сортирање кантом на примеру.

Нека су елементи низа -

буцкет сорт

Сада креирајте сегменте са опсегом од 0 до 25. Опсег кантица је 0-5, 5-10, 10-15, 15-20, 20-25. Елементи се убацују у корпе према опсегу кашике. Претпоставимо да је вредност ставке 16, тако да ће бити уметнута у корпу са опсегом 15-20. Слично томе, свака ставка низа ће се уметнути у складу са тим.

Познато је да је ова фаза расипање елемената низа .

буцкет сорт

Сада, врста сваку канту појединачно. Елементи сваке корпе могу се сортирати коришћењем било ког од стабилних алгоритама за сортирање.

буцкет сорт

Најзад, скупити сортирани елементи из сваке корпе по реду

буцкет сорт

Сада је низ потпуно сортиран.

Сложеност сортирања кантом

Сада, да видимо временску сложеност сортирања кантом у најбољем, просечном и најгорем случају. Видећемо и просторну сложеност сорте кофе.

1. Временска сложеност

Случај време Сложеност
Најбољи случај О(н + к)
Авераге Цасе О(н + к)
Најгори случај На2)
    Најбољи случај сложености -Појављује се када није потребно сортирање, тј. низ је већ сортиран. У сортирању по корпама, најбољи случај се дешава када су елементи равномерно распоређени у корпама. Сложеност ће бити боља ако су елементи већ сортирани у кантама.
    Ако користимо сортирање уметањем да сортирамо елементе буцкета, укупна сложеност ће бити линеарна, тј. О(н + к), где је О(н) за прављење корпи, а О(к) за сортирање елемената корпе коришћење алгоритама са линеарном временском сложеношћу у најбољем случају.
    У најбољем случају временска сложеност сортирања је О(н + к) .Просечна сложеност случаја -Јавља се када су елементи низа у збрканом редоследу који није правилно растући и неопадајући. Буцкет сортирање ради у линеарном времену, чак и када су елементи равномерно распоређени. Просечна временска сложеност случаја сортирања је О(н + К) .Сложеност у најгорем случају -У буцкет сортирању, најгори случај се дешава када су елементи у низу блиског домета, због тога морају бити смештени у исту канту. Дакле, неке корпе имају више елемената од других.
    Сложеност ће се погоршати када су елементи обрнутим редоследом.
    У најгорем случају временска сложеност сортирања је На2) .

2. Сложеност простора

Спаце Цомплекити О(н*к)
Стабилно ДА
  • Просторна сложеност сортирања кантом је О(н*к).

Имплементација сортирања кантом

Сада, хајде да видимо програме сортирања буцкет-а у различитим програмским језицима.

Програм: Напишите програм за имплементацију буцкет сортирања у језику Ц.

 #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></=>