125 字
1 分钟

堆排序

2025-05-04
无标签

堆排序使用到了二叉堆

堆排序需要在建堆后进行二次操作。

template<typename T>
void HeapSort(T arr[], int n) {
// 建堆
Heapify(arr, n);
// 重新下沉
for (int i = n - 1; i > 0; i--)
{
Swap(arr[0], arr[i]);
ShiftDown(arr, i, 0);
}
}

首先建堆能确保堆有序,这时候首元素一定是最大的。

取出首元素,将末尾元素作为新的根节点并进行下沉,下沉后能确保新的堆有序。

重复进行上述操作。