找回密码
 注册
关于网站域名变更的通知
查看: 348|回复: 1
打印 上一主题 下一主题

《算法导论(第三版)》第六章,堆排序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-11 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
《算法导论(第三版)》第六章,堆排序
. P' Y* {8 u+ G" d2 q/ E9 T7 j( ?7 i( }) ^$ t  }0 p2 I
matlab使用堆比较麻烦,且不好理解,就直接使用堆排序的思想,直接操作数组进行示意,简化代码。' z/ s  |* m) }$ n9 [* C6 p
: f) C3 ^$ l8 ]( ?  @2 w
HEAPSORT
4 [# N/ |  J: J  {
  • clear;clc
  • A=[16 14 10 8 7 9 3 2 4 1]%数组
  • %A=[4 1 3 2 16 9 10 14 8 7]%数组
  • A=BUILD_MAX_HEAP(A);%建最大堆
  • for i=length(A):-1:1%反方向引导退出
  •     temp(i)=A(1);
  •     A(1)=A(i);
  •     A(i)=[];
  •     A=MAX_HEAPIFY(A,1);
  • end
  • A=temp%结果9 y$ h+ W/ a; a& \& a/ [

- }* q& Z1 w3 q# T  H: p
6 s8 r  D0 g5 b1 l, U+ X! j) Z- B+ D
* C$ _0 E2 v" ?% O6 p3 z0 O5 L
建立堆6 W; c4 V) S( o: T& f0 u
  • function [A] = BUILD_MAX_HEAP(A)
  • for i=floor(length(A)/2):-1:1
  •     A=MAX_HEAPIFY(A,i);
  • end
  • end
    2 p+ y7 b" J5 @

0 P! }$ n) J6 r' C0 ~( L[color=rgb(51, 102, 153) !important]复制代码
8 p  ?: c- w4 s. x$ Y, a$ D0 ?" J
堆处理1 b* S' @, z) c7 @
  • function [A] = MAX_HEAPIFY(A,i)
  • l=2*i;%左节点序号
  • r=2*i+1;%右节点序号
  • %比较该节点与左右子节点的大小
  • if l<=length(A) & A(l)>A(i)
  •     largest=l;
  • else
  •     largest=i;
  • end
  • if r<=length(A) & A(r)>A(largest)
  •     largest=r;
  • end
  • %如果最大子节点变换,则交换,继续递归。
  • if largest~=i
  •     temp=A(i);
  •     A(i)=A(largest);
  •     A(largest)=temp;
  •     A=MAX_HEAPIFY(A,largest);
  • end
  • end
    4 M. H4 g1 V( X7 r2 Z

* Q6 V5 o& F7 v+ A% q$ f
' f: a* `* b& Y# b6 T# p
' o  f9 o( r8 z0 |) E
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-4 17:44 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表