我尝试构建一个使用数组维度对矩阵进行排序的函数。 我的意思是N-by-M-by-W -...-Z的阵列 排序是冒泡排序。
我遇到了两个问题:
第一 - 我知道泡泡排序的方式。我可以对矩阵进行排序,以便每行都进行排序,但不是整个矩阵。如果我被要求对数组进行冒泡排序,我是否应该对整个矩阵进行排序,或者甚至整个数组或数组上的冒泡排序只是处理行?
第二 - 我遇到的更大的问题是我的想法被卡住了,因为我为2dim,3dim,4dim构建了一个函数,每次我不得不再添加一个函数,但我找不到解决方案因为它将采取未知的fors。
我已经在stackoverflow上看到了一个针对不同任务的解决方案但是具有相同的未知dim数组,但我还没有完全理解它。
我在这里添加了迄今为止我在4昏暗中所做的事情,但我认为这非常糟糕。这是代码:
if ( ismatrix(D) )
cycles=ndims(D);
for w=0:cycles-1 %% number of times needs to sort triple dim matrix
for z=1:row-1 %minimum nubmer of times the proccess needs to run in order to get fully sorted two dim matrix
for j=0:(col-2)
for i=1:row
if( D((i+j*row)+(row*col*w) )>D( (i+j*row+row)+(row*col*w) ) )
temp=D((i+j*row)+(row*col*w) );
D((i+j*row)+(row*col*w) )=D((i+j*row+row)+(row*col*w) );
D((i+j*row+row)+(row*col*w) )=temp;
end
end
end
end
end
答案 0 :(得分:0)
你的问题看起来像是一项任务,所以我不会给你一个解决方案,而是一些解决方案所需的知识。
使用下标而不是线性索引。
正如rayryeng已经提到的,您可以使用D(1,2)
索引第一行,第二列。要选择完整列,您还需要colon
运算符:D(:,2)
混合下标索引和线性索引以迭代所有列。仅仅为了演示目的,在n维矩阵中打印所有列的代码:
M=rand(3,2,1,2);
[rows,e]=size(M);
for idx=1:e
disp(M(:,e))
end
您可能需要阅读size
,colon
和" Matrix Indexing"
最后只是一个捷径。要在矩阵中交换索引a和b,请使用M([a,b])=M([b,a])
,这显然可以与其他维度的下标索引结合使用:M([a,b],idx)=M([b,a],idx)