Java排序之堆排序

一、基本概念

要掌握堆排序,先要了解堆这种数据结构。堆排序

堆是一个近似完全二叉树的结构,其任意节点满足性质:

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]

 

排序过程:

  1. 将初始带排序列构造成大顶堆
  2. 将堆顶元素与最后一个元素交换,然后从新构造大顶堆
  3. 重复第2步直到序列有序。

二、算法特点

是否稳定:false

平均时间复杂度:O(nlogn)

最优时间复杂度:O(nlogn)

最差时间复杂度:O(nlogn)

空间复杂度:  O(1)

三、相关代码

 

 

 

 

posted @ 2012-10-20 23:31  一瓶珍情  阅读(244)  评论(0编辑  收藏  举报