您的位置:首页 > 其它

算法导论-堆排序学习笔记

2013-08-06 10:57 225 查看
最开始研究的是大顶堆,父亲节点的值会大于两个孩子节点的值,但是左孩子跟右孩子没有值之间的差异。

插入一个元素的时候,整个堆可能不满足堆的性质,所以要调整堆,调整算法如下:

MAX_HEAPIFY(A,i)

l = Left(i)

r = Right(i)

if l < A.heap_size && A(l) > A(i)

    largest = l

else largest = i

if r < A.heap_size && A(r) > A(largest)

    largest = r

if largest != i

    swap(A(largest),A(i))

     MAX_HEAPIFY(A,largest)

T(n) = T(2n/3) + O(1)

根据主定理可以得知 调整堆的时间复杂度为O(lgn)

根据完全二叉树的性质,可以得知堆的所有的叶子节点的下标范围为n/2+1~n.所以建堆的算法如下

BUILD-MAX_HEAP(A)

A.heapsize= A.length

for i in n/2.....1

   MAX_HEAPIFY(A,i)

HEAP_SORT(A)

  BUILD-MAX_HEAP(A)

for i in A.length ...2

  swap(A[i],A[1])

  A.heapsize -= 1

 MAX_HEAPIFY(A,1)

堆排序的应用:优先级队列

 堆排序算法并没有快速排序性能好,优先队列的应用有很多,在共享计算机调度当中,会从等待队列当中找到优先级最高的作业,从队列当中摘出来进行调度。

阅读(48) | 评论(0) | 转发(0) |

0
上一篇:算法导论-计算时间复杂度主定理

下一篇:用printf打印uint64_t的符号

相关热门文章
Hadoop分布式文件系统安全隐患...

数据结构之最短路径(Floyd)...

网络设备驱动读书笔记...

Camera--V4L2驱动学习记录...

http://blog.donews.com/limod...

linux 常见服务端口

什么是shell

【ROOTFS搭建】busybox的httpd...

linux socket的bug??

linux的线程是否受到了保护?...

这样配置的服务器能够承受8k并...

vm里的系统能够ping到nfs,但...

bind是否随机从两台master中读...

在win7下用cygwin搭建hadoop,...

Mysql的binglog日志能否分库备...

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: