堆排序的应用
1.堆的应用
1.1建堆:向上调整建堆或者向下调整建堆
1)升序:建大堆
2)降序:建小堆
方法一:向上调整建堆
方法二:向下调整建堆
思路:通过最后一个叶子节点找到它的父节点,然后通过它的父节点依次向上比较(也就是向下调整建堆)
时间复杂度
向上调整的时间复杂度:O(N*logN)
向下调整的时间复杂度:O(N)
综上:向下调整的时间复杂度小于向上调整的时间复杂度
1.2堆排序(通过建堆)
思路:不要直接使用堆这个数据结构,那样不仅时间复杂度很大,还要额外开辟空间,所以直接把这个要排序的数组看成堆,然后进行排序
注意:排升序,建大堆,然后将那个最大的数和最后一个进行交换的时候,就相当于向下调整
排降序,建小堆
对堆中元素进行向上调整函数
对堆中元素进行向下调整函数
1.3堆排序的时间复杂度是O(N✖️logN)