Сортировка кучей — различия между версиями
(Новая страница: «'''Сортировка кучей''', '''пирамидальная сортировка''' (англ. '''Heapsort''') {{---}} алгоритм сортиров...») |
|||
Строка 1: | Строка 1: | ||
− | '''Сортировка кучей''', '''пирамидальная сортировка''' (англ. '''Heapsort''') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]] | + | '''Сортировка кучей''', '''пирамидальная сортировка''' (англ. '''Heapsort''') {{---}} алгоритм сортировки, использующий структуру данных [[Двоичная куча|двоичная куча]]. Это нестабильный алгоритм сортировки с гарантированным временем работы <tex>\Theta(n\log{n})</tex> , где <tex>n</tex> {{---}} количество элементов для сортировки, и использующий <tex>O(1)</tex> дополнительной памяти. |
== Алгоритм == | == Алгоритм == |
Версия 07:25, 3 июня 2012
Сортировка кучей, пирамидальная сортировка (англ. Heapsort) — алгоритм сортировки, использующий структуру данных двоичная куча. Это нестабильный алгоритм сортировки с гарантированным временем работы , где — количество элементов для сортировки, и использующий дополнительной памяти.
Содержание
Алгоритм
Необходимо отсортировать массив
, размером . Построим на базе этого массива за невозрастающую кучу. Так как по свойству кучи максимальный элемент находится в корне, то, поменявшись его местами с , он встанет на свое место. Далее вызовем процедуру sift_down(0), предварительно уменьшив на . Она за просеет на нужное место и сформирует новую кучу (так как мы уменьшили ее размер, то куча располагается с по , а элемент находится на своем месте). Повторим эту процедуру для новой кучи, только корень будет менять местами не с , а с . Проделав аналогичные операции , мы получим отсортированный массив.Реализация
// Входной массив x, содержащий n элементов. for i = 0 to n - 1 min = i; for j = i + 1 to n - 1 if x[j] < x[min] min = j; swap(x[i], x[min]); // Массив x отсортирован
Пример
Пусть дана последовательность из
элементов .Массив | Описание шага | |
---|---|---|
Первый проход (текущий массив начинается с первого элемента) | ||
5 4 1 2 3 | Находим первый минимальный элемент — 1 | |
1 4 5 2 3 | Меняем минимальный и первый элементы местами | |
Второй проход (текущий массив начинается со следующего элемента) | ||
1 5 4 2 3 | Находим следующий минимальный элемент — 2 | |
1 2 4 5 3 | Меняем минимальный и второй элементы местами | |
Третий проход (текущий массив начинается со следующего элемента) | ||
1 2 4 5 3 | Находим следующий минимальный элемент — 3 | |
1 2 3 5 4 | Меняем минимальный и третий элементы местами | |
Четвертый проход (текущий массив начинается со следующего элемента) | ||
1 2 3 5 4 | Находим следующий минимальный элемент — 4 | |
1 2 3 4 5 | Меняем минимальный и четвертый элементы местами | |
1 2 3 4 5 | Массив отсортирован |
Ссылки
Литература
- Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 2-е издание. М.: Издательский дом "Вильямс", 2005. ISBN 5-8459-0857-4