堆排序matlab,matlab 堆排序 ...原创(初来报到)

初次来到论坛,用个小程序打个招呼。:D

我用MATLAB写程序时,希望用到较少的类C的循环。程序引用MATLAB库的函数尽量少些。我在搜索某个算法的时候看到论坛。大段程序就不贴了。

于是拿个练习的小程序来打个招呼,也许很不完善。呵呵。

欢迎拍砖。

程序如下:

function M=megosort(A)   %堆排序算法。

n=size(A,2);

temp=A;

for i=1:n

temp(1,i:n)=metoosort(temp(1,i:n));

end

M=temp;

end

function   A=metoosort(A)     %求子树最大堆子函数

for i=floor(size(A,2)/2):-1:1

A=megomax(A,i);

end

end

function [A,i]=megomax(A,i)  %求单个分支最大堆子函数

if i*2<=size(A,2)

if i*2+1>size(A,2)

if A(i)<=A(2*i)

[A(i),A(i*2)]=swapAB(A(i),A(2*i));

i=2*i;

end

else

key=i;

if A(key)<=A(key*2)

[A(key),A(key*2)]=swapAB(A(key),A(key*2));

i=2*key;

end

if A(key)<=A(2*key+1)

[A(key),A(key*2+1)]=swapAB(A(key),A(key*2+1));

i=2*key+1;

end

if key~=i

[A,i]=megomax(A,i);

end

end

end

end

function [A,B]=swapAB(A,B)

temp=A;

A=B;

B=temp;

end

*******************************************************************************************************************************************************

下面是测试用的 打乱程序。

function [A]=disorganise(B)

A=B*0;

n=size(B,2);

C=B;

for i=1:n

[A(1,i),C]=catm(C);

end

end

function [temp,C]=catm(B)

n=size(B,2);

cma=round(rand(1)*(n-1))+1;

temp=B(1,cma);

C=zeros(1,n-1);

if (cma~=1||cma~=n)

C=[B(1,1:cma-1),B(1,cma+1:n)];

elseif cma==1

C=B(1,2:n);

elseif cam==n

C=B(1,1:n-1);

end

end

%******************************************************************

OK,大家好!

[本帖最后由 moset 于 2011-4-12 11:15 编辑]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值