Введение
В этом лабе мы исследуем реализацию алгоритма heapsort на JavaScript. Heapsort - это алгоритм сортировки, основанный на сравнении, который работает путём разделения массива на отсортированную и неотсортированную области, и итеративного уменьшения неотсортированной области путём извлечения наибольшего элемента и перемещения его в отсортированную область. С помощью этого лабара вы получите более глубокое понимание того, как работает алгоритм heapsort и как реализовать его с использованием рекурсии и замыканий в JavaScript.
Алгоритм Heap Sort
Для практики программирования откройте Терминал/SSH и введите 'node'. Следующий алгоритм сортирует массив чисел с использованием алгоритма heapsort. Следуйте шагам:
- Используйте рекурсию в функции.
- Используйте оператор расширения
(...)для клонирования исходного массива,arr. - Используйте замыкания для объявления переменной
lи функцииheapify. - Используйте цикл
forиMath.floor()в сочетании сheapify, чтобы создать максимальную кучу из массива. - Используйте цикл
for, чтобы последовательно сужать рассматриваемый диапазон, используяheapifyи меняя значения при необходимости, чтобы отсортировать клонированный массив.
const heapsort = (arr) => {
const a = [...arr];
let l = a.length;
const heapify = (a, i) => {
const left = 2 * i + 1;
const right = 2 * i + 2;
let max = i;
if (left < l && a[left] > a[max]) max = left;
if (right < l && a[right] > a[max]) max = right;
if (max !== i) {
[a[max], a[i]] = [a[i], a[max]];
heapify(a, max);
}
};
for (let i = Math.floor(l / 2); i >= 0; i -= 1) heapify(a, i);
for (let i = a.length - 1; i > 0; i--) {
[a[0], a[i]] = [a[i], a[0]];
l--;
heapify(a, 0);
}
return a;
};
Например:
heapsort([6, 3, 4, 1]); // [1, 3, 4, 6]
Резюме
Поздравляем! Вы завершили лабу по Heap Sort. Вы можете практиковаться в более многих лабах в LabEx, чтобы улучшить свои навыки.