MATLAB用M语言写矩阵排序方法,在线等。能运行追加100分!!

MATLAB用M语言写矩阵排序方法,在线等。能运行追加100分!!,第1张

冒泡法:

a=randint(1,10,[1 10])

for i=1:length(a)

for j=1:length(a)-i

if a(j)>a(j+1)

t=a(j);a(j)=a(j+1);a(j+1)=t;

end

end

end

a

a =

5 5 4 2 7 7 8 5 6 2%%原序列

a =

2 2 4 5 5 5 6 7 7 8%%排序后序列

1楼是选择法排序,同样适用!

a=rand(100,100);

tic

[b,pos]=sort(a(:,1));

aa=a(pos,:);

toc

tic

A=sortrows(a,1);

toc

det(aa-A)

前面的算法时间要短,效果是一样的

Elapsed time is 0000110 seconds

Elapsed time is 0000259 seconds

ans =

0

用个小矩阵检测下

a=magic(5);

tic

[b,pos]=sort(a(:,1));

aa=a(pos,:)

toc

tic

A=sortrows(a,1)

toc

det(aa-A)

a =

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

aa =

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

17 24 1 8 15

23 5 7 14 16

Elapsed time is 0000133 seconds

A =

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

17 24 1 8 15

23 5 7 14 16

Elapsed time is 0000223 seconds

ans =

0

如何在矩阵A中找到0的位置,然后把0放在最前面,后面的数字依序排列

改问题实际上就是查找、提取、排序问题,此问题可以这样来解决。

1、使用find函数,在矩阵A中查找0的位置;即

[m,n]=find(A==0); %m是行的位置,n是列的位置

2、提取含0以后的数据并赋值给A2,提取0以前的数据并赋值给A1

3、排序,B=[A2,A1],将0以后的数据放在首位,然后再0以前的数据排在后面

4、执行代码

A=[2 3 9 4 0 5 7 6 8 1]

[m,n]=find(A==0);

A1=A(m,1:n-1);

A2=A(m,n:end);

B=[A2,A1]

5、执行结果

在Matlab中排序某个向量时,可以使用sort(A),其中A为待排序的向量,如果仅是用来排序A,那么直接使用sort(A)即可, 如果排序后还需要保留原来的索引可以用返回值,即[B,ind]=sort(A),计算后,B是A排序后的向量,A保持不变,ind是B中每一项对应于A 中项的索引。排序是按升序进行的。

由于在sort函数的结果中,是按升序排序的,要转换成降序,先用X=eye(n)生成一个n维的单位阵,然后用X=rot90(X)将其旋转为次对角线的单位阵,再用原来矩阵乘以X即可,如要讲A逆序排列采用如下步骤:

X=eye(size(A));

X=rot90(X);

A=AX;

假如a是一个2n的矩阵,即两行

b=a(1,:);

[c,pos]=sort(b);%pos为排序后的下标,c为第一行的排序结果;

a(2,:)=a(2,pos);%第二行按照第一行排序的下标对应

a(1,:)=c;%第一行结果重新赋给a 的第一行

以下适用于mn的矩阵按第一行排序

[ b, pos ] = sort( a( 1, : ) );

a = a( :, pos );

matlab help:

Syntax:

B = sort(A)

B = sort(A,dim)

B = sort(,mode)

[B,IX] = sort()

%% 生成实验数据

n = 6;

A = cell(n,1);

h1 = randint(1,n,[1 10]); % 相同的第 1 行数据

for p = 1:n

    h2 = randint(1,n,[1 10]); % 生成第 2 行数据

    A{p} = [h1; h2];

end

%% 实现步骤:

%% 1取出所有矩阵的第 2 行数据形成新矩阵 H2

%% 2将 H2 进行行排序并取得其索引值

[m,n] = size(A);

H2 = zeros(m,m);

for p = 1:m

    H2(p,:) = A{p}(2,:);

end

[B,index] = sortrows(H2,1); % 行排序无降序选择,只能升序排

R = index(end:-1:1)         % 升序索引逆序输出

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11671355.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存