堆排序是二叉堆的一个应用,在上一篇文章当中说明了二叉堆的原理,二叉堆的deleteMin可以直接得到最小值,对由源数据构建出的二叉堆进行N次deleteMin操作就可以得到源数据的一个从小到大的序列,建立一个二叉堆花费O(N)时间,而一次deleteMin操作花费O(logN),因此堆排序的时间复杂度为O(NlogN)和快排一样.
但是这样的话用到了一个附带数组,带来了空间问题,可以每次将堆顶的数据放到堆数组的末尾,然后在堆中移除最后一个节点
堆排序是二叉堆的一个应用,在上一篇文章当中说明了二叉堆的原理,二叉堆的deleteMin可以直接得到最小值,对由源数据构建出的二叉堆进行N次deleteMin操作就可以得到源数据的一个从小到大的序列,建立一个二叉堆花费O(N)时间,而一次deleteMin操作花费O(logN),因此堆排序的时间复杂度为O(NlogN)和快排一样.
但是这样的话用到了一个附带数组,带来了空间问题,可以每次将堆顶的数据放到堆数组的末尾,然后在堆中移除最后一个节点