Java排序之堆排序
2012-10-20 23:31
197 查看
一、基本概念
要掌握堆排序,先要了解堆这种数据结构。堆是一个近似完全二叉树的结构,其任意节点满足性质:
Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2]
即任何一非叶节点的键值不大于或者不小于其左右孩子节点的键值。
大顶堆:满足Key[i]>=Key[2i+1]&&key>=key[2i+2]
小顶堆:满足Key[i]<=Key[2i+1]&&key<=key[2i+2]
排序过程:
将初始带排序列构造成大顶堆
将堆顶元素与最后一个元素交换,然后从新构造大顶堆
重复第2步直到序列有序。
二、算法特点
是否稳定:false平均时间复杂度:O(nlogn)
最优时间复杂度:O(nlogn)
最差时间复杂度:O(nlogn)
空间复杂度: O(1)
三、相关代码
相关文章推荐
- 排序算法--选择排序(简单选择排序、堆排序)java实现
- 选择排序、树形排序、堆排序的java代码实现
- 整型溢出 & sleep() wait() 的区别 & Java 堆排序 快速排序 计数排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 【Java】快速排序、归并排序、堆排序、基数排序实现总结
- 快速排序与堆排序的Java实现(泛型)
- Java排序六:堆排序
- Java实现快速排序、归并排序、堆排序和希尔排序
- 算法之排序小结3---堆排序(Java)
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- 程序员必知的8大排序(java实现)(二)(堆排序)
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 排序(快排,冒泡,堆排序,插入排序,归并排序,选择排序)算法Java实现
- 【算法拾遗(java描述)】--- 选择排序(直接选择排序、堆排序)
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- 堆排序,堆增删操作,Java数组实现堆排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- Java实现常见排序--希尔排序、快排序、堆排序、归并排序等Java实现代码
- Java实现排序算法之堆排序