堆排序及性能分析

目录
一 堆的相关知识
二 堆的伪代码
三 堆的算法性能分析


一 堆的相关知识


1.1 堆的性质
1、下标为i的下标,其父节点为floor(i/2),左子节点下标为2i,其右子节点下标为 2i+1
2、n个元素的堆时,叶节点的下标为 floor(n/2)+1,floor(n/2)+2,······,n;
       证明:假设  2k≤n2k+1
                  ∴  floor(n/2)+1 = k+1;
                  ∴  假设   floor(n/2)+1 不是叶节点,则其存在左子节点;
                    floor(n/2)+1 左子节点的下标为2k+2;
                  ∵  2k+2>n,大于堆的规模,所以 floor(n/2)+1不可能是父节;
3、n个元素的堆,整个堆的高度为
高度h(底层h=0)时最大节点数为


1.2 最大堆



二 堆排序伪代码


堆排序主要由 堆维护建堆两个关键步骤构成

2.1 堆维护:

2.2 建堆
2.3 堆排序



三 算法性能分析


3.1 堆维护复杂度分析

维护堆步骤是父节点和两个子节点比较后,在调用子树规模的堆维护步骤,且子树的最大规模为2n/3
∴T(n)≤ T(2n/3)+⊙(1)
根据主从定理,b=0,a=2/3,所以 ⊙( )=⊙(1),所以T(n)≤⊙(lgn),即T(n)=O(lgn)
因为规模为n的堆高度h=lg,所T(n)=O(h)

3.2 建堆复杂度分析

建堆就是从下标最大的父节点(最底层的父节点开始)之下二上地执行堆维护,
因为规模为n的堆的高度为
,在高度h是最多含有
个节点
∴建堆的复杂度为 ,根据线性性质有:

将x=1/2代入公式 可得


3.2 堆排序复杂度分析

堆排序主要步骤是执行一次建堆和n-1此堆维护

建堆O(n),每次堆维护的复杂度为O(lgn),所以对排序的算法复杂度为T(n)=(n-1)O(lgn)+O(n)=O(nlgn)+O(n)=O(nlgn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值