Пирамидальная сортировка
Дальнейшее развитие сортировки выбором. Элементы исходной выборки уложим в структуру данных Двоичная куча, а потом извлечём обратно по одному из корневого элемента.
type TAI = array of integer; ... procedure HeapSort(var A: TAI); var bh : TBinaryHeap; i : integer; begin // Создаём класс двоичной кучи // с элементами типа Integer bh := TBinaryHeap.Create(A, // Описываем функцию сравнения элементов TComparer.Construct( function(const A, B: integer): integer begin Result := Sign(A - B); end ) ); // Исходный массив A сразу загружен и отсортирован в соответствии // со свойствами двоичной кучи max-heap // Осталось только извлечь элементы for I := High(A) downto Low(A) do A[i] := bh.ExtractMax; // Массив отсортирован по возрастанию. bh.Free; end;
Максимальная | O(N log(N)) |
Минимальная | O(N log(N)) |
Средняя | O(N log(N)) |
Метки:
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии