题目大意
http://www.lintcode.com/problem/sort-integers
整数排序,这里用堆排序实现。
题目分析
使用最大堆,堆排序的思路是按照算法导论中的思路。写了三个方法,第一个是heapify方法,作用是堆化,调用这个方法的前提是,节点i的左右子树都是堆。第二个方法是构建最大堆,从最后一个不是叶子节点开始往前遍历,逐步堆化,最后整棵树就是堆了。第三个方法就是堆排序了。首先先构建最大堆,构建完之后,树根一定是最大的元素,将树根与最后一个元素交换,然后堆的大小减一(最后一个元素不考虑了),然后调用堆化方法,这样树根又成了最大元素,之后再与最后一个元素交换,如此反复。
代码
|
|
时间复杂度O(n*logn)