我在Matlab中经常会遇到诸如此类的问题:
要对多个数组进⾏排序,但是这⼏个数组之间有很⼤的关联,排完序之后他们的相对顺序是不能变的,譬如说,原来数组A中的排序前的第1个元素排序后变成了第5个元素,那么我的数组B中的第1个元素也要变成第5个元素,也就是说,其他的数组的元素要根据某⼀个数组排序之后的结果⽽调整顺序。 在C,C++中,我⾸先想到的就是结构体数组啊,⾃定义Struct,然后调⽤⾃带的Sort函数,⾃⼰写⼀个Cmp函数,Oki了。在Matlab也可以这样做,但是也可以使⽤Matlab⾃带的sort函数,间接实现结构体排序。crj-200
包仁
假设我有4个数组分别代表学⽣的学号,成绩,年龄,性别,然后我要根据他们的成绩进⾏降序排序,代码如下: %⾸先是⾃⼰编造数据
%原谅我使⽤骆驼式命名法(Camel-Case)
变形镁合金青龙偃月刀韩少功studentNumber = [11,24,43,21,34,25];
score = [28,42,21,45,32,43]; %⼀批假学⽣,满分150
age = [18,19,21,20,21,17];
gender = ['F','M','F','M','M','F'];
%调⽤sort函数
[score,index] = sort(score,'descend'); %descend代表降序
%输出
score
studentNumber = studentNumber(index)
age = age(index)
阿德勒
gender = gender(index)
%结果
score =
45 43 42 32 28 21
studentNumber =
21 25 24 34 11 43
age =
20 17 19 21 18 21
gender =
'MFMMFF'
这段代码恰如其分的满⾜了我们的要求,⾸先调⽤sort函数排序提供的数组(成绩),返回值包括已排好序的数组和排序后的数组中每⼀个元素在原来的旧数组的位置,如同⼀开始我们举的例⼦,数组A中的排序前的第1个元素排序后变成了第5个元素,那么index(5) = 1,新数组中的第5个元素是旧数组中的第⼀个元素。将成绩排好序之后,就是根据index将其他的数组(学号,年龄,性别)按照之前所排序数组(成绩)的顺序进⾏排列。
这是我的第⼀篇CSDN博客,如果有什么建议,请指出,⽽且如果您有更好的⽅法,欢迎指教!
大学生核心竞争力