ПРЕДИСЛОВИЕ: Тема структур данных и алгоритмов Java будет время от времени обновляться. Читатели могут контролировать это. Эта статья начинается с самого простого алгоритма сортировки - сортировки ведра и анализирует идеи реализации, реализацию кода, характеристики производительности и применимые сценарии сортировки ведра.
0. Другие индексы алгоритма сортировки
//www.vevb.com/article/120879.htm
1. Идея сортировки ведра
Простой пример:
Сортировка английских результатов тестов по 6 человек (1 ~ 10 баллов). Если оценка составляет [6, 5, 8, 8, 10, 9], идея сортировки с ведрами состоит в том, чтобы подготовить 10 ведра, цифры составляют 1 ~ 10 в последовательности, а оценки помещаются в соответствующие ведра, такие как 6 точек в ковш № 6, а два 8 баллов в ведро № 8 ... и затем выводут их один, в соответствии с порядком номеров бактерия (если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет, если нет. Это основная идея сортировки ведра.
На самом деле, это просто простая версия. Представьте себе, что если диапазон сортировки элементов, которые будут отсортированы, относительно большой, например, 1 ~ 10 000, вам нужно 10 000 ведер? На самом деле, в этом случае один элемент не всегда помещается в ведро, но много раз несколько элементов помещаются в ведро. На самом деле, реальная сортировка ведра и список хэш имеет тот же принцип.
В реальной сортировке элементы в каждом ведре обычно отсортируются с использованием других алгоритмов сортировки, поэтому чаще, сортировка ведра используется в сочетании с другими алгоритмами сортировки.
2. Код сортировки ведра
После анализа идеи сортировки ведра вы должны сначала узнать диапазон элементов, которые будут отсортированы. Принимая выше в качестве примера, объявите массив длины 10 в качестве 10 ведра, а затем поместите результаты один за другим в ведро, значение ведра составляет +1 и, наконец, выводит индекс массива в обратном порядке. Значение каждой позиции массива выводится несколько раз, так что базовая сорта ведра может быть достигнута.
открытый класс Bucetsort {private int [] ведра; частный int [] массив; public bucketsort (int range, int [] array) {this.buckets = new int [range]; this.array = массив; } /*Сортировка* / public void sort () {if (array! = Null && array.length> 1) {for (int i = 0; i <array.length; i ++) {buckets [array [i]] ++; }}}/*Сортировка вывода*/public void sortout () {// обратный выходные данные для (int i = buckets.length-1; i> = 0; i-) {for (int j = 0; j <buckets [i]; j ++) {System.out.print (i+"/t"); }}}}Тестовый код:
открытый класс sorttest {public static void main (string [] args) {testbucketssort (); } private static void testbucketssort () {int [] array = {5,7,3,5,4,8,6,4,1,2}; Bucketsort BS = новый Bucketsort (10, массив); bs.sort (); bs.sortout (); // Выходная печать Sort}}3. характеристики производительности сортировки ведра
Сортировка ведра на самом деле требует итерации только через все элементы, которые будут отсортированы, а затем размещение их в указанном положении в последовательности. Если добавлено время сортировки вывода, необходимо пройти все ведра. Следовательно, временная сложность сортировки ведра составляет O (N+M), n - это количество элементов, которые необходимо сортировать, а M - количество ведер, то есть диапазон элементов, которые необходимо сортировать. Этот алгоритм является очень быстрым алгоритмом сортировки, но пространственная сложность относительно большая.
Когда диапазон размеров, которые будут расположены, является относительно большим, но количество элементов, которые необходимо расположить, относительно невелико, космические отходы более серьезны. Распределение элементов, которые должны быть организованы, является равномерным каждый месяц, и чем выше уровень использования пространства, это на самом деле редко.
Благодаря вышеуказанному анализу производительности мы можем получить характеристики сортировки ведра: быстро и просто, но в то же время использование пространства является низким. Когда данные, которые должны быть отсортированы, велики, скорость использования пространства невыносима.
4. Применимые сценарии сортировки ведра
В соответствии с характеристиками сортировки ведра, сортировка ведра, как правило, применима к некоторым конкретным средам, например, диапазон данных относительно ограничен или существует определенные требования, такие как необходимость быстрого получения определенных значений с помощью хэш -отображения, и необходимо подсчитать количество каждого числа. Но все это основано на подтверждении объема данных. Если размер прицела слишком велик, рассмотрите возможность использования других алгоритмов.