matlab - 未知数组维度冒泡排序

时间:2015-03-08 01:46:20

标签: arrays matlab sorting matrix multidimensional-array

我尝试构建一个使用数组维度对矩阵进行排序的函数。 我的意思是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

1 个答案:

答案 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

您可能需要阅读sizecolon和" Matrix Indexing"

的文档

最后只是一个捷径。要在矩阵中交换索引a和b,请使用M([a,b])=M([b,a]),这显然可以与其他维度的下标索引结合使用:M([a,b],idx)=M([b,a],idx)