logo

Алгоритм сортування ковша

У цій статті ми обговоримо алгоритм сортування відра. Елементи даних у сортуванні сегментів розподіляються у вигляді сегментів. Під час програмування чи технічних співбесід для інженерів програмного забезпечення часто запитують про алгоритми сортування. Тому важливо обговорити тему.

Сортування сегментів — це алгоритм сортування, який розділяє елементи на кілька груп, які називаються сегментами. Елементи під час сортування по сегментах спочатку рівномірно поділяються на групи, які називаються сегментами, а потім сортуються за будь-яким іншим алгоритмом сортування. Після цього елементи збираються в сортованому порядку.

Основна процедура виконання ковшового сортування представлена ​​таким чином:

  • Спочатку розділіть діапазон на фіксовану кількість сегментів.
  • Потім киньте кожен елемент у відповідне відро.
  • Після цього відсортуйте кожне відро окремо, застосовуючи алгоритм сортування.
  • І, нарешті, об’єднайте всі відсортовані відра.

Переваги ковшового сортування:

  • Відро сортування зменшує кількість. порівнянь.
  • Це асимптотично швидко через рівномірний розподіл елементів.

Обмеження ковшового сортування:

  • Це може бути стабільний алгоритм сортування, а може й ні.
  • Це не корисно, якщо ми маємо великий масив, оскільки це збільшує вартість.
  • Це не алгоритм сортування на місці, оскільки для сортування сегментів потрібен додатковий простір.

Найкращий і середній випадок складності сортування відра O(n + k) , а в найгіршому випадку складність сортування ковша становить O(n2) , де п це кількість предметів.

Сортування ковша зазвичай використовується -

  • Зі значеннями з плаваючою комою.
  • Коли вхідні дані рівномірно розподіляються в діапазоні.

Основна ідея виконання сортування ковша наведена так:

 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 

Підхід «розкидати-збирати».

Ми можемо зрозуміти алгоритм сортування Bucket за допомогою підходу розсіювання. Тут задані елементи спочатку розкидають у відра. Після розсіювання елементи в кожному відрі сортуються за допомогою стабільного алгоритму сортування. Нарешті відсортовані елементи будуть зібрані по порядку.

Давайте візьмемо невідсортований масив, щоб зрозуміти процес сортування ковша. На прикладі буде легше зрозуміти сортування відра.

Нехай елементи масиву -

сортувати відро

Тепер створіть відра з діапазоном від 0 до 25. Діапазон відер 0-5, 5-10, 10-15, 15-20, 20-25. Елементи вставляються в ковші відповідно до діапазону ковшів. Припустімо, що значення елемента дорівнює 16, тому його буде вставлено у відро з діапазоном 15-20. Так само кожен елемент масиву буде вставлено відповідно.

Ця фаза, як відомо, є розкид елементів масиву .

сортувати відро

тепер, сортувати кожне відро окремо. Елементи кожного сегмента можна сортувати за допомогою будь-якого стабільного алгоритму сортування.

сортувати відро

Нарешті, збиратися відсортовані елементи з кожного відра по порядку

сортувати відро

Тепер масив повністю відсортований.

Складність сортування ковша

Тепер давайте подивимося на часову складність сортування ковша в найкращому, середньому випадку та в гіршому випадку. Ми також побачимо просторову складність сортування ковша.

1. Складність часу

Справа час Складність
Кращий випадок O(n + k)
Середній випадок O(n + k)
Найгірший випадок O(n2)
    Найкращий варіант складності -Це відбувається, коли сортування не потрібно, тобто масив уже відсортовано. У ковшовому сортуванні найкращий випадок відбувається, коли елементи рівномірно розподілені у відрах. Складність буде кращою, якщо елементи вже розсортовані у відрах.
    Якщо ми використовуємо сортування вставкою для сортування елементів сегмента, загальна складність буде лінійною, тобто O(n + k), де O(n) призначено для створення блоків, а O(k) – для сортування елементів сегмента. використовуючи в кращому випадку алгоритми з лінійною часовою складністю.
    Оптимальна часова складність сортування ковша O(n + k) .Середня складність справи -Це відбувається, коли елементи масиву розташовані в перемішаному порядку, який неправильно зростає та спадає. Бакетне сортування виконується в лінійному часі, навіть якщо елементи розподілені рівномірно. Середня складність випадку сортування ковша становить O(n + K) .Найгірша складність -У ковшовому сортуванні найгірший випадок виникає, коли елементи знаходяться в близькому діапазоні в масиві, тому їх потрібно розмістити в одному ковші. Отже, деякі відра мають більше елементів, ніж інші.
    Складність погіршується, коли елементи розташовані у зворотному порядку.
    Найгірша часова складність сортування ковша O(n2) .

2. Просторова складність

Космічна складність O(n*k)
Стабільний ТАК
  • Просторова складність ковшового сортування дорівнює O(n*k).

Реалізація ковшового сортування

Тепер давайте подивимося на програми ковшового сортування на різних мовах програмування.

програма: Напишіть програму для реалізації ковшового сортування мовою 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></=>