Алгоритм поиска и сортировки JavaScript: сортировка по куче

Алгоритм поиска и сортировки JavaScript: упражнение 3 с решением

Напишите программу JavaScript для сортировки списка элементов с помощью сортировки кучи.

На компьютере наука, heapsort (изобретен Дж. Уильямсом Вильямсом в 1964 г.) — это алгоритм сортировки, основанный на сравнении. Heapsort можно рассматривать как улучшенную сортировку выбора: как и этот алгоритм, он делит входные данные на отсортированную и несортированную области и интерактивно сжимает несортированную область, извлекая самый большой элемент и перемещая его в отсортированную область. Улучшение состоит в использовании структуры данных кучи, а не поиска в линейном времени для поиска максимума. Хотя на практике на большинстве машин она несколько медленнее, чем хорошо реализованная быстрая сортировка, она имеет преимущество в виде более благоприятного времени выполнения O (n log n) в худшем случае. Heapsort — это алгоритм на месте, но это не стабильная сортировка.

Запуск алгоритма heapsort, сортирующего массив случайно переставленных значений. На первом этапе алгоритма элементы массива переупорядочиваются в соответствии со свойством кучи. Перед фактической сортировкой для иллюстрации кратко показана древовидная структура кучи.

Авторские права на анимацию: RolandH

Пример решения:

HTML-код:

       Программа JavaScript для сортировки кучи      

Код JavaScript:

   var array_length;/* для создания массива MAX */function heap_root (input, i) {var left = 2 * i + 1;  var right = 2 * я + 2;  var max = i;  если (левый ввод [макс]) {макс = левый;  } если (правый ввод [макс]) {макс = право;  } если (макс! = я) {своп (вход, я, макс);  heap_root (ввод, макс);  }} функция подкачки (ввод, индекс_A, индекс_B) {var temp = input [index_A];  ввод [index_A] = ввод [index_B];  input [index_B] = temp;} функция heapSort (input) {array_length = input.length;  for (var i = Math.floor (array_length/2); i> = 0; i - = 1) {heap_root (вход, я);  } for (i = input.length - 1; i> 0; i--) {swap (input, 0, i);  array_length--;  heap_root (ввод, 0);  }} var arr = [3, 0, 2, 5, -1, 4, 1]; heapSort (arr); console.log (arr);  

Пример вывода:

 [- 1,0,1,2,3,4,5] 

Блок-схема:

Живая демонстрация:

См. Упражнение 3 для алгоритма поиска и сортировки пера от w3resource (@ w3resource) на CodePen.

Назад: Написать программа на JavaScript для сортировки списка элементов с помощью сортировки слиянием.
Далее: Напишите программу на JavaScript для сортировки списка элементов с помощью сортировки вставкой.

Оцените статью
nanomode.ru
Добавить комментарий