图论10—二维矩阵排序及索引

来源:互联网 发布:小提琴音准软件 编辑:程序博客网 时间:2024/06/07 15:20

一、算法描述

1.1 问题描述:

一维矩阵可以直接用sort函数排序并求出索引,那么二维矩阵怎么求排序和索引?

1.2 思路:
Step1:二维矩阵大小为:M×N。它可以按列展开大小为1×(M×N)的一维矩阵。

Step2:对一维矩阵排序并标记索引index;
Step3:对新排序按列收缩化为二维矩阵,即新矩阵;
Step4:对索引按位置关系求出行和列编号,即一个数字化成一个单元数组,例如索引位置为8,在3×3矩阵中是第2行第3列。数学表达式为:
l={j|M×(j-1)<index(i)≤M×j}
h=index(i)-M×(j-1);
其中,M是行数,N是列数,i是索引的下标,j是所求列数,l是索引转化为矩阵时的列,h是行。
Step5:遍历所有索引值,将索引按列收缩为矩阵形状。

二、算法程序

使用说明:写出要排序的矩阵(或读取),调用sort_mat函数,sort_mat函数如下:

sort_mat.m

function [New_mat Index_ij]= sort_mat(A)clc[M,N]=size(A);B=reshape(A,1,[]);[new_xulie index]=sort(B);% new_xulie=fliplr(new_xulie);    %逆序,即降序排列% index=fliplr(index);            %逆序,即降序排列for i=1:M*N    for j=1:N        if index(i)>(j-1)*M  &  index(i)<=j*M   %判断当前索引的位置            l=j;                                %当前索引的列            h=index(i)-(j-1)*M;                 %当前索引的行                      Index_ij{i}=[h l];        end    endendNew_mat=reshape(new_xulie,M,N);  %新矩阵Index_ij=reshape(Index_ij,M,N);  %新矩阵对应原矩阵的位置end

三、算例及运算结果

3.1算例

>> A=[3 6 1;4 5 2]

3.2 运行结果

>> [New_mat Index_ij]= sort_mat(A)
New_mat =       1              3              5              2              4              6       Index_ij =     [1x2 double]    [1x2 double]    [1x2 double]    [1x2 double]    [1x2 double]    [1x2 double]

四、结果分析

运行结果显示,新矩阵New_mat已经按列排序,索引位置(即对应于原矩阵的位置)为Index_ij。为便于对比,将原矩阵、新矩阵和索引矩阵排列如下: 

A361452New_mat135246

Index_ij[1,3][1,1][2,2][2,3][2,1][1,2]

五、结论

通过对实验结果的分析,说明上述算法科学有效,可以在实践中应用。

 


1 0
原创粉丝点击