编程实现枚举排序;并用Random函数建表验证:

来源:百度知道 编辑:UC知道 时间:2024/05/15 09:25:19
编程实现枚举排序;并用Random函数建表验证:
枚举排序(Enumeration Sort)是一种最简单的排序算法,通常也称为秩排序(Rank Sort)。该算法的具体思想是(假设按关键字递增排序),对每一个待排序的元素统计小于它的所有元素的个数,从而得到该元素最终处于序列中的位置。假定待排序的n个数存在a[1]……a[n]中。首先将a[1]与a[2]……a[n]比较,记录比其小的数的个数,令其为k,a[1]就被存入有序的数组b[1]……b[n]的b[k+1]位置上;然后将a[2]与a[1],a[3]……a[n]比较,记录比其小的数的个数,依此类推。这样的比较操作共n(n-1)次,所以串行秩排序的时间复杂度为O(n2)。
参考资料: 算法 枚举排序串行算法
输入:a[1]……a[n]
输出:b[1]……b[n]
Begin
for i=1 to n do
(1) k=1
(2) for j=1 to n do
if a[i]>a[j] then
k=k+1
end if
end for
(3) b[k]=a[i]
end for
End

你的函数参数要求是数值,但命令行输入的时候给函数传递的是一个向量0:50。

所以函数内部在for循环那里,for k=0:m里面的m代入的是向量,
那么matlab自动取矩阵的第一个元素,你这里是0,
所以就变成for k=0:0,等于没循环。
因此最后结果只有s=0

解决办法,
一种可以在命令行输入for循环求y。
>>m=0:50;
>>y=[];
>>for k=1:length(m)
y(k)=fun1(m(k));
end
>>plot(m.y)

第二种办法,把函数改写了,参数按矩阵来算。
function s=fun1(m)
s=zeros(size(m));
for k=1:numel(m)
a=m(k)*binopdf(0:m(k),100,0.01);
s(k)=sum(a(:));
end;
这样函数就可以接受矩阵了。

然后在命令行输入
>>m=0:50;
>>y=fun1(m);
>>plot(m,y)

不会

c
or
matlab