Heap алгоритм сортировки Java Реализация и анализ

1, алгоритм сортировки куча краткой

Как следует из названия Казахстан, алгоритм кучи сортировки использовать кучи алгоритм для этой структуры данных конструкции, кучи сортировки алгоритм в Интернете можно найти много информации, чтобы объяснить, но я учусь их собственного понимания своих собственных, чтобы написать в блоге, так что я единственная критическая точка в моем знании некоторых из блог.

Ключевые моменты знаний кучного алгоритм сортировки:

  • Сложность времени: в лучшем случае, самая худшая, временная сложность в среднем случае O (NlogN);
  • Стабильность: алгоритм сортировки неустойчив
  • Стек и куча в большой корне корешковой кучи, алгоритм сортировки кучи соответствующего алгоритм сортировки кучи делятся на большой и малый корень корневого алгоритм сортировки кучи
  • Большой алгоритм корневой кучи сортировки соответствует сортировке по возрастанию, куча соответствует корешкам нисходящих алгоритма сортировки

2, основы алгоритма сортировки кучи

  Heap алгоритм сортировки требует использования такой структуры данных в куче.

  Куча представляет собой полное бинарное дерево со следующими свойствами: значение каждого узла равно или больше, чем значения, левый и правый дочерний узел, называемый большой верхней стека; каждый узел или значение меньше или равна ее левого дочернего узла значение, известное как небольшая вершина стеки. Binary дерево знаний о том, что представляет собой полное бинарное дерево представляет собой полное бинарное дерево, и т.д. Что является основой этого фонда.  

  Поскольку куча полное бинарное дерево, так что мы можем использовать массив для хранения, когда полное бинарное дерево, это происходит потому, что использование массивов может отражать отношения между различным бинарным деревом массивом узлов индексом. Таким образом, мы находим узел вокруг ребенка можно получить непосредственно индекс массива дочерних узлов в соответствии с индексом массива узла. Другими словами, логическая структура двоичного дерева может быть косвенно отражается от индекса массива.

  大 顶 堆: обр [я]> = обр [2i + 1] && обр [я]> = обр [2i + 2]

    小 顶 堆: обр [я] <= обр [2i + 1] && обр [я] <= обр [2i + 2]  

3, основная идея алгоритма сортировки кучи

  • Стадия А: Построение большой корневой кучи или корешков реактора: Из-за множества массивов, начинающихся не согласуется со стеком характеристик, она требует соответствующих индексов отношений между соответствующими данными перестройки в массиве так, чтобы удовлетворить встретить большой корень кучи или корешков стек характеристики, когда корректировка является последним по одному вверх от одного не-листового узла, начиная регулировку.
  • Шаг два: конец верхней части элементов стека и переключающих элементов, так что максимальные конечные элементы (например, с использованием большого корня кучи). После обмена равносилен последний элемент уже порядка. Поскольку массив является большой корень кучи, поэтому наибольший элемент в конце концов, конечный результат является своего рода в порядке возрастания
  • Шаг три: выполнение первого элемента стека не обязательно соответствовать Конец шага два кучи рода характеристики, первый узел должен продолжать регулировать стек, затем верхнюю часть элементов стека и переключающих элементов в конце, чтобы дать второй большой элемент.
  • Шаг четыре: так неоднократно обменивались, перестраивать обмен.

 

4, алгоритм сортировки кучи Java для достижения

 

. 1  пакет com.baozi.paixu;
 2  
3.  Импорт java.util.Arrays;
 4.  
5.  / ** 
6.  * Пирамидальная сортировка Основной идея: последовательность упорядочения быть сконфигурирована в большой корень кучи, в это время максимального значения в верхней части стеки всей последовательности корневой узел. Элемент , с которым конец обмена,
 7  * В этом случае торцевой элемент является максимальным, то элементом п-1 вызывал повторно собака кучу, было бы получить максимум N-1 элементы, так что цикл может быть получен
 -  * упорядоченная последовательность.
9  * Примечание:. Лучшая, худшая, это среднее время сложность алгоритма O (NlogN) куча сортировки
 10  * шаг алгоритмов сортировки:
 11  * 1, начальная конфигурация стеки: последовательность данной конфигурации неупорядоченной в большой корень кучи (корень кучу с крупными судами по возрастанию, по убыванию стек с небольшим корнем)
 12,  * ① определяется из первой последовательности ( для хранения массива) последние не-листовые узлы (длина / 2-1) постоянно ориентированные справа налево под регулировка
 13  * ② гарантировать , что каждое поддерево является самым большим поддеревом корневого узла для
 14  * 2, конца верхней части элементов стеки и переключающих элементов, таким образом, что самый большой конец элемента, а затем остальные п-1 элементы продолжить продолжать корректировать п-1 представляет собой число элементов
 15 * Большая куча корень, то на этот раз в верхней части элемента стека вынимается, так что цикл может быть получена упорядоченной последовательность.
16  *
 . 17  * @author Baozi
 18  * @create 2019-05-15-18: 16
 . 19   * / 
20  общественного  класс пирамидальной сортировка {
 21      общественного  статический  недействительный основной (String [] арг) {
 22          INT [] = то НУМС нового новый  INT [] 10 {, 9 ,. 8 ,. 7 ,. 6 ,. 5 ,. 4 ,. 3, 2 ,. 1. };
 23          HeapSort.heapSort (в НУМС);
 24          System.out.println (из Arrays.toString (в НУМС));
 25  
26      }
 27  
28      общественности  статической  недействительнымПирамидальная сортировка ( INT [] в НУМСЕ) {
 29          // . 1, создать большую корневую стек, как случайный элемент , как требуется для создания большого стека корневой кучи
 30          // с началом элемента данных присутствуют в массиве
 31          // целью здесь является использование цикла для каждого узла не-листа должны быть индивидуально регулировать 
32          для ( INT I = nums.length / 2 - 1;. I> = 0; я-- ) {
 33              // корректируются при большом корне кучи для последнего неориентированного листового узла (для целей бинарной структуры дерева), от
 34              @ справа налево (для целей массива хранения) перестройками 
35              adjustHeap (в НУМСЕ, я, nums.length);
 36          }
 37          // 2, конец переключающего элемента и первого элемента , а затем повторно регулировать структуру стека 
38          для ( INT J = nums.length - 1;. J> 0, J, ) {
39              // в верхней части элементов стеки и переключающих элементов в конце 
40              подкачки (в НУМСЕ, 0 , I);
 41              // повторно регулировки кучи 
42              adjustHeap (в НУМСЕ, 0 , I);
 43          }
 44      }
 45  
46      Частный  статический  вакуум подкачка ( INT [] в НУМС, Int I, INT J) , {
 47          INT ТЕМП = в НУМС [I];
 48          в НУМС [I] = к НУМС [J];
 49          в НУМС [J] = TEMP;
 50      }
 51  
52      Частный  статический недействительный adjustHeap ( INT [] в НУМСЕ, Int я, INT длина) {
 53          // сначала удалить текущий элемент я 
54          INT ТЕМП = в НУМСЕ [I];
 55          // от узла я левый дочерний узел начинается, т.е. 2i + 1 в начале, на самом деле, этот цикл регулируется , чтобы направить узел , чтобы определить конечное положение 
56          для ( INT K = 2 * I + 1, K <длиной; K = K * 2 + 1 ) {
 57              // Если левого ребенок пункт меньше , чем правый дочерний узел, к относится к правому дочернему узлу 
58              ПЧ (к + 1 <длина && в НУМС [K] <в НУМС [к + 1.. ]) {
 59                  K ++ ;
 60              }
 61              // Если дочерний узел больше , чем родительский узел, значение , присвоенное на родительский узел дочернего узла (без обмена) 
62             ЕСЛИ (в НУМС [K]> Temp) {
 63                  в НУМС [I] = то НУМС [K];
 64                  I = К;
 65              }
 66          }
 67          // температура имеет значение в конечном положении 
68          в НУМС [I] = темп;
 69      }
 70  
71 }

 

рекомендация

отwww.cnblogs.com/BaoZiY/p/10929438.html