pioonlaser
Сортировка кучи использует функцию наибольшего (или наименьшего) ключа верхней записи большой корневой кучи (или малой корневой кучи), что упрощает выбор самой большой (или наименьшей) ключевой записи в текущей неупорядоченной области.
(1) Основная идея сортировки с большой корневой кучей
① Сначала постройте исходный файл R[1..n] в большую корневую кучу, которая является начальной неупорядоченной областью
② Обменяйте запись R[1] с самым большим ключевым словом (то есть вершиной кучи) с последней записью R[n] неупорядоченной области, тем самым получив новую неупорядоченную область R[1..n-1] и область последовательности R[n], и удовлетворяет R[1..n-1].ключи≤R[n].ключ
③ Поскольку новый корень R[1] может нарушить природу кучи после обмена, текущая неупорядоченная область R[1..n-1] должна быть настроена на кучу. Затем обмениваем запись R[1] с наибольшим ключевым словом в R[1..n-1] снова с последней записью R[n-1] интервала, тем самым получая новую неупорядоченную область R[1.. n-2] и упорядоченную область R[n-1..n], и все равно удовлетворяем соотношению R[1..n-2].ключи≤R[n-1..n].ключи, также нуждающиеся в R [1..n-2], настраиваются на кучу.
...
Пока в неупорядоченной области не останется только один элемент.
(2) основная операция алгоритма сортировки большой корневой кучи:
① Операция инициализации: постройте R[1..n] в качестве начальной кучи;
② Основная операция каждой сортировки: обмен верхней записи R[1] текущей неупорядоченной области с последней записью интервала, а затем настроить новую неупорядоченную область в кучу (также известную как куча перестроения).
записка:
① Нужно только сделать сортировку n-1 и выбрать более крупные ключевые слова n-1, чтобы увеличить файлы в порядке.
② Сортировка с небольшой корневой кучей аналогична использованию большой корневой кучи, за исключением того, что результат сортировки находится в порядке убывания. Сортировка кучи противоположна сортировке прямого выбора: неупорядоченная область всегда находится перед упорядоченной областью в сортировке кучи в любое время, а упорядоченная область находится от конца исходного вектора к задней части