125 字
1 分钟
堆排序
堆排序使用到了二叉堆。
堆排序需要在建堆后进行二次操作。
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); }}首先建堆能确保堆有序,这时候首元素一定是最大的。
取出首元素,将末尾元素作为新的根节点并进行下沉,下沉后能确保新的堆有序。
重复进行上述操作。