Сортировка по группам в основном полезна, когда входные данные равномерно распределены по диапазону. Например, рассмотрим следующую проблему.
Отсортируйте большой набор чисел с плавающей запятой, которые находятся в диапазоне от 0,0 до 1,0 и равномерно распределены по всему диапазону. Как мы эффективно сортируем числа?
Простой способ — применить алгоритм сортировки, основанный на сравнении. Нижняя граница для алгоритма сортировки на основе сравнения (сортировка слиянием, сортировка по кучи, быстрая сортировка и т. Д.) Составляет Ω (n Log n), т. Е. Они не могут работать лучше, чем nLogn.
Можем ли мы отсортировать массив по линейному времени? Отсчет сортировки не может быть применен здесь, так как мы используем ключи как индекс при подсчете сортировки. Здесь ключи являются числами с плавающей запятой.
Идея состоит в том, чтобы использовать сортировку ведром. Ниже приводится алгоритм ковша.
bucketSort(arr[], n) 1) Create n empty buckets (Or lists). 2) Do following for every array element arr[i]. .......a) Insert arr[i] into bucket[n*array[i]] 3) Sort individual buckets using insertion sort. 4) Concatenate all sorted buckets.
Сложность времени: если мы предположим, что вставка в сегмент занимает время O (1), то шаги 1 и 2 приведенного выше алгоритма явно занимают время O (n). O (1) легко возможно, если мы используем связанный список для представления сегмента (в следующем коде вектор C ++ используется для простоты). Шаг 4 также занимает O (n) времени, поскольку во всех сегментах будет n элементов.
Основным этапом анализа является этап 3. Этот этап также занимает в среднем время O (n), если все числа распределены равномерно (см. Книгу CLRS для получения более подробной информации).
Ниже приведена реализация вышеуказанного алгоритма.
|
python3
|
Выход:
Sorted array is 0.1234 0.3434 0.565 0.656 0.665 0.897
Сортировка ведра для сортировки массива с отрицательными числами
Ссылки:
Введение в алгоритмы 3-е издание Клиффорд Стейн, Томас Х. Кормен, Чарльз Э. Лейзерсон, Рональд Л. Ривест
http://en.wikipedia.org/wiki/Bucket_sort
Фотосъёмка:
Викторина по сортировке ковшей
Другие алгоритмы сортировки на GeeksforGeeks / GeeksQuiz:
- Выбор сортировки
- Пузырьковая сортировка
- Сортировка вставки
- Сортировка слиянием
- Куча сортировка
- QuickSort
- Radix Sort
- Подсчет Сортировка
- ShellSort
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Сортировать элементы по частоте | Комплект 1
- Граф Инверсии в массиве | Набор 1 (с использованием сортировки слиянием)
- Сортировка слиянием для связанных списков
- Сортировать массив 0, 1 и 2
- std :: sort () в C ++ STL
- Сортировать почти отсортированный (или отсортированный по K) массив
- Сортировка номеров, хранящихся на разных машинах
- Итеративная быстрая сортировка
- Сортировать связанный список 0, 1 и 2
- Подсчет Сортировка
- Сортировать элементы по частоте | Набор 2
- Radix Sort
- Сортировать n чисел в диапазоне от 0 до n ^ 2 — 1 за линейное время
- Сортировать массив в соответствии с порядком, определенным другим массивом
- Временная сложность вставки сортировки при наличии O (n) инверсий?
0.00 (0%) 0 votes