Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сортировки_алгоритмы.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
28.7 Кб
Скачать

Блочная сортировка

Блочная сортировка (Карманная сортировка, корзинная сортировка, англ. Bucket sort) — алгоритм сортировки, в котором сортируемые элементы распределяются между конечным числом отдельных блоков (карманов, корзин) так, чтобы все элементы в каждом следующем по порядку блоке были всегда больше (или меньше), чем в предыдущем. Каждый блок затем сортируется отдельно, либо рекурсивно тем же методом, либо другим. Затем элементы помещаются обратно в массив. Этот тип сортировки может обладать линейным временем исполнения.

Данный алгоритм требует знаний о природе сортируемых данных, выходящих за рамки функций "сравнить" и "поменять местами", достаточных для сортировки слиянием, сортировки пирамидой, быстрой сортировки, сортировки Шелла, сортировки вставкой.

Реализация

void bucketSort(int ar[], const int sz)

{

    const int Rasryad = 10;

    const int Position = 20000;

    int TempArray[Rasryad][Position] = {0};

    int number = 1, Ras;

    for(int i = 0; i < N; i++)

    {

        count = 0;

        for(int j = 0; j < sz; j++)

        {

            Ras = ar[j] / number % 10;

            TempArray[Ras][j] = ar[j];

        }

        for(int a = 0; a < Rasryad; a++)

        {

            for(int b = 0; b < Position; b++)

            {

                if(TempArray[a][b] != 0)

                {

                    ar[count++] = TempArray[a][b];

                    TempArray[a][b] = 0;

                }

            }

        }

        number *= 10;

    }

    for(int i = 0; i < sz; i++)

        sm += IntToStr(mas[i]) + "  ";

}

Вывод

Преимущества: относится к классу быстрых алгоритмов с линейным временем исполнения O(N) (на удачных входных данных).

Недостатки: сильно деградирует при большом количестве мало отличных элементов, или же на неудачной функции получения номера корзины по содержимому элемента. В некоторых таких случаях для строк, возникающих в реализациях основанного на сортировке строк алгоритма сжатия BWT, оказывается, что быстрая сортировка строк в версии Седжвика значительно превосходит блочную сортировку скоростью.