排序算法
不稳定排序
O(n\log(n))
堆
堆是具有以下性质的完全二叉树:
根结点标号为 0,则对于根 i 的左子为 2i+1 右子为 2i+2
大顶堆:每个结点的值都大于或等于其左右子结点的值
arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]小顶堆:每个结点的值都小于或等于其左右子结点的值
arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]

基本思想步骤
一般升序采用大顶堆,降序采用小顶堆
将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点
将根结点与末尾元素进行交换,此时末尾就为最大值
然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值