1、sort函数
sort函数用于对矩阵元素按升序或者降序进行排序,其调用语法如下。
(1)B=sort(A):对A进行默认的升序排序。输入参量A可以是向量、矩阵或字符串,若为向量,则对向量中的所有元素进行排序;若为矩阵,则对列方向各元素进行排序;若为字符串,则按其对应的ASCII码的大小进行排序。
(2)B=sort(A,dim):对矩阵A中的第dim维进行升序排序。
(3)B = sort(...,mode):按照指定升序或降序进行排序。mode可以是'ascend'(默认,升序),或者是'descend'(降序)。
(4)[B,IX] = sort(A,...):对A进行排序,并返回排序后各元素的下标值。
【例4-20】 sort函数使用示例。
>> A = [ 3 7 5;0 4 2 ]
A =
3 7 5
0 4 2
>> sort(A,1) % 列方向排序
ans =
0 4 2
3 7 5
>> sort(A,2) % 行方向排序
ans =
3 5 7
0 2 4
>> sort(A,2,'descend') % 行方向降序排序
ans =
7 5 3
4 2 0
>> [B,IX] = sort(A,2) % 排序并返回下标
B =
3 5 7
0 2 4
IX =
1 3 2
1 3 2
>> B=reshape(18:-1:1,3,3,2) % 创建高维矩阵
B(:,:,1) =
18 15 12
17 14 11
16 13 10
B(:,:,2) =
9 6 3
8 5 2
7 4 1
>> sort(B,1) % 列方向排序
ans(:,:,1) =
16 13 10
17 14 11
18 15 12
ans(:,:,2) =
7 4 1
8 5 2
9 6 3
>> sort(B,2) % 行方向排序
ans(:,:,1) =
12 15 18
11 14 17
10 13 16
ans(:,:,2) =
3 6 9
2 5 8
1 4 7
>> sort(B,3) % 页方向排序
ans(:,:,1) =
9 6 3
8 5 2
7 4 1
ans(:,:,2) =
18 15 12
17 14 11
16 13 10
2.sortrows函数
sortrows函数用于在保持各行相对元素不变的情况下,对各行整体进行升序排列。sortrows函数调用语法如下。
(1)B = sortrows(A):按行对A进行升序排列。输入变量A必须是矩阵或者列向量。
(2)B = sortrows(A,column):基于向量column指定的列对矩阵A进行排序。
(3)[B,index] = sortrows(A,...):在对矩阵A进行排序的同时,返回下标索引。如果A是一个列向量,则B = A(index);如果A是一个m×n的矩阵,则B = A(index,:)。
【例4-21】 sortrows函数使用示例。
>> rand('state',0) % 设定随机数种子,以便于读者验证
>> A = floor(rand(6,7) * 100); % 创建测试矩阵,floor函数用于取整,以便于观察
>> A(1:4,1)=95; A(5:6,1)=76;
>> A(2:4,2)=7; A(3,3)=73 % 修改部分数据,以体现函数用法
A =
95 45 92 41 13 1 84
95 7 73 89 20 74 52
95 7 73 5 19 44 20
95 7 40 35 60 93 67
76 61 93 81 27 46 83
76 79 91 0 19 41 1
>> B = sortrows(A) % 按照第1列元素大小对矩阵A进行排序
B =
76 61 93 81 27 46 83
76 79 91 0 19 41 1
95 7 40 35 60 93 67
95 7 73 5 19 44 20
95 7 73 89 20 74 52
95 45 92 41 13 1 84
通过比较可以看到,矩阵A中第1列具有相等的元素。sortrows函数在进行排序操作时,如果指定列中存在相等元素,则通过比较指定列右侧列中的元素来进行排序,右侧列中若还有相等元素,则按照右侧再下一列的元素进行排序。
>> C = sortrows(A,2) % 按照第2列的大小进行排序
C =
95 7 73 89 20 74 52
95 7 73 5 19 44 20
95 7 40 35 60 93 67
95 45 92 41 13 1 84
76 61 93 81 27 46 83
76 79 91 0 19 41 1
>> D = sortrows(A,[1 7]) % 按照第1列和第7列进行排序,首先按照第1列进行排序,如果第1列中存在相等元素,则按照第7列进行排序。
D =
76 79 91 0 19 41 1
76 61 93 81 27 46 83
95 7 73 5 19 44 20
95 7 73 89 20 74 52
95 7 40 35 60 93 67
95 45 92 41 13 1 84
>> E = sortrows(A,[1 -7]) % 按照第1列和第7列进行排序,[1 -7]中的负号的含义是按照降序排序。
E =
76 61 93 81 27 46 83
76 79 91 0 19 41 1
95 45 92 41 13 1 84
95 7 40 35 60 93 67
95 7 73 89 20 74 52
95 7 73 5 19 44 20
>> F = sortrows(A, -4) % 按照第4列进行降序排序
F =
95 7 73 89 20 74 52
76 61 93 81 27 46 83
95 45 92 41 13 1 84
95 7 40 35 60 93 67
95 7 73 5 19 44 20
76 79 91 0 19 41 1