图论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。为便于对比,将原矩阵、新矩阵和索引矩阵排列如下:
五、结论
通过对实验结果的分析,说明上述算法科学有效,可以在实践中应用。
1 0
- 图论10—二维矩阵排序及索引
- 蛇形矩阵生成及索引
- 二维数组及冒泡排序
- Numpy:排序及返回索引、多重复制、两个矩阵对应元素取最小值、随机选择元素
- 二维矩阵
- java(4)--排序算法及二维数组
- java之数组的索引,排序以及二维数组
- 搜索二维矩阵——LintCode
- 二维矩阵相乘——cpu&&gpu
- lintcode刷题——搜索二维矩阵
- MySQL笔记(索引排序及压缩索引)
- Python numpy 转置、逆、去掉一列、按列取出、矩阵拼接、矩阵排序、矩阵相等、np.where,一维转二维
- 二维矩阵实现矩阵相乘
- 矩阵类,二维数组
- 最大二维子矩阵
- 二维矩阵原地转换
- 矩阵、二维数组
- 二维矩阵的乘法
- Web Hacking 101 中文版 十四、XML 外部实体注入(二)
- 欢迎使用CSDN-markdown编辑器
- 【步兵 lua】事件模型和事件解耦
- C++ 版 mciSendString 的使用例子(完整类)
- 计算机网络基础
- 图论10—二维矩阵排序及索引
- 419. Battleships in a Board
- mac下安装和使用brew
- 小游戏 fifteen puzzle
- DroneKit示例分析1---状态的获取与设置
- c/c++中&& ||的区别
- iOS-菜鸟到大师-1-iOS介绍及hello world
- ESP8266下载电路的搭建
- Java流式输入输出-面向字节