sort
对数组元素排序
说明
指定用于排序的其他参数。例如,B
= sort(___,Name,Value
)sort(A,'ComparisonMethod','abs')
按模对 A
的元素进行排序。
示例
按升序对向量排序
按升序对矩阵行排序
创建一个矩阵,并按升序对每一行排序。
A = [3 6 5; 7 -2 4; 1 0 -9]
A = 3×3
3 6 5
7 -2 4
1 0 -9
B = sort(A,2)
B = 3×3
3 5 6
-2 4 7
-9 0 1
按降序对矩阵列排序
创建一个矩阵,并按升序对每一列排序。
A = [10 -12 4 8; 6 -9 8 0; 2 3 11 -2; 1 1 9 3]
A = 4×4
10 -12 4 8
6 -9 8 0
2 3 11 -2
1 1 9 3
B = sort(A,'descend')
B = 4×4
10 3 11 8
6 1 9 3
2 -9 8 0
1 -12 4 -2
对字符串数组排序
从 R2017a 开始,您可以使用双引号创建字符串数组,并使用 sort
函数对它们进行排序。根据 Unicode® 字典顺序对字符串数组的每一列中的字符串进行排序。
A = ["Santos","Burns"; ... "Jones","Morita"; ... "Petrov","Adams"]; B = sort(A)
B = 3x2 string
"Jones" "Adams"
"Petrov" "Burns"
"Santos" "Morita"
对每一行中的字符串进行排序。
B = sort(A,2)
B = 3x2 string
"Burns" "Santos"
"Jones" "Morita"
"Adams" "Petrov"
对 datetime
数组排序并进行索引
创建一个由 datetime
值构成的数组,然后按升序排序,也就是从最早到最近的日历日期排序。
ds = {'2012-12-22';'2063-04-05';'1992-01-12'}; A = datetime(ds,'Format','yyyy-MM-dd')
A = 3x1 datetime
2012-12-22
2063-04-05
1992-01-12
[B,I] = sort(A)
B = 3x1 datetime
1992-01-12
2012-12-22
2063-04-05
I = 3×1
3
1
2
B
列出排序后的日期以及包含 A
的相应索引的 I
。
使用索引数组 I
从原始数组直接访问排序后的元素。
A(I)
ans = 3x1 datetime
1992-01-12
2012-12-22
2063-04-05
按相同顺序对向量进行排序
创建两个在对应元素中包含相关数据的行向量。
X = [3 6 4 2 1 5]; Y = ["yellow" "purple" "green" "orange" "red" "blue"];
首先对向量 X
进行排序,然后按照与 X
相同的顺序对向量 Y
进行排序。
[Xsorted,I] = sort(X)
Xsorted = 1×6
1 2 3 4 5 6
I = 1×6
5 4 1 3 6 2
Ysorted = Y(I)
Ysorted = 1x6 string
"red" "orange" "yellow" "green" "blue" "purple"
对三维数组排序
创建一个 2×2×2 数组,并沿第三维度按升序对元素进行排序。
A(:,:,1) = [2 3; 1 6]; A(:,:,2) = [-1 9; 0 12]; A
A = A(:,:,1) = 2 3 1 6 A(:,:,2) = -1 9 0 12
B = sort(A,3)
B = B(:,:,1) = -1 3 0 6 B(:,:,2) = 2 9 1 12
使用 A(:)
(A
的列表示形式)对 A
的所有元素进行排序。
B = sort(A(:))
B = 8×1
-1
0
1
2
3
6
9
12
复数向量
按复数向量元素的实部对元素进行排序。默认情况下,sort
函数按复数值的幅值对其进行排序,再使用相位角对幅值相同的值继续排序。将 'ComparisonMethod'
的值指定为 'real'
,以按复数值的实部对其排序。对于具有相等实部的元素,sort
将基于其虚部进行排序。
A = [1+2i 3+1i 1i 0 -1i]; B = sort(A,'ComparisonMethod','real')
B = 1×5 complex
0.0000 - 1.0000i 0.0000 + 0.0000i 0.0000 + 1.0000i 1.0000 + 2.0000i 3.0000 + 1.0000i
输入参数
A
— 输入数组
向量 | 矩阵 | 多维数组
输入数组,指定为向量、矩阵或多维数组。
如果
A
是标量,则sort(A)
返回A
。如果
A
是复数,默认情况下,sort
会按模对元素进行排序。如果有多个元素具有相等的模,则按区间 (−π, π] 上的相位角对这些元素进行排序。如果
A
是字符向量元胞数组或字符串数组,则sort(A)
按照 UTF-16 字符编码方案的代码顺序对元素进行排序。排序区分大小写。有关对字符和字符串数组进行排序的详细信息,请参阅字符和字符串数组的排序顺序。如果
A
是字符串数组,则sort
将对数组元素重新排序,但不会对字符串中的字符重新排序。如果
A
是分类数组,则排序顺序基于categories(A)
返回的类别顺序。
数据类型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
| cell
| categorical
| datetime
| duration
复数支持: 是
dim
— 沿其运算的维度
正整数标量
沿其运算的维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。
假定有矩阵
A
。sort(A,1)
对A
的列元素进行排序。sort(A,2)
对A
的行元素进行排序。
如果 dim
大于 ndims(A)
,sort
将返回 A
。当 A
是元胞数组时,不支持 dim
,即,sort
仅沿其大小不等于 1 的第一个数组维度进行运算。
数据类型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
direction
— 排序方向
'ascend'
(默认) | 'descend'
排序方向,指定为 'ascend'
或 'descend'
。当 A
是元胞数组时,不支持 direction
,即,sort
仅按升序排序。
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: sort(A,'MissingPlacement','last')
MissingPlacement
— 缺失值的位置
'auto'
(默认) | 'first'
| 'last'
缺失值(NaN
、NaT
、<undefined>
和 missing
)的位置,指定为逗号分隔的对组,包含 'MissingPlacement'
和下列项之一:
'auto'
- 缺失的元素放在最后(对于升序排序)或放在最前面(对于降序排序)。'first'
- 缺失的元素放在最前面。'last'
- 缺失的元素放在最后。
ComparisonMethod
— 元素比较方法
'auto'
(默认) | 'real'
| 'abs'
元素比较方法,指定为逗号分隔的对组,包含 'ComparisonMethod'
和下列项之一:
'auto'
- 当A
为实数时,按real(A)
对A
进行排序;当A
为复数时,按abs(A)
进行排序。'real'
- 当A
为实数或复数时,按real(A)
对A
进行排序。如果A
包含具有相等实部的元素,则使用imag(A)
进行排序。'abs'
- 当A
为实数或复数时,按abs(A)
对A
进行排序。如果A
包含具有相等模的元素,则使用区间 (-π,π] 中的angle(A)
进行排序。
输出参数
B
— 已排序数组
向量 | 矩阵 | 多维数组
已排序数组,以向量、矩阵或多维数组的形式返回。B
的大小和类型均与 A
相同。
数据类型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
| cell
| categorical
| datetime
| duration
I
— 排序索引
向量 | 矩阵 | 多维数组
排序索引,以向量、矩阵或多维数组的形式返回。I
的大小与 A
相同。这些索引向量沿 sort
作用于的同一维度指定方向。例如,如果 A
是一个 2×3 矩阵,则 [B,I] = sort(A,2)
对 A
中的每行元素进行排序。输出 I
是 1×3 行索引向量的集合,用于描述 A
中每行元素的重新排列。
sort
函数使用一种稳定的排序算法。因此,当输入包含重复值时,无论排序方向如何,排序索引都会保留输入的原始顺序。例如,如果 A = [1 2 1 2]
,则 [Ba,Ia] = sort(A,'ascend')
返回排序索引 Ia = [1 3 2 4]
,[Bd,Id] = sort(A,'descend')
返回排序索引 Id = [2 4 1 3]
。
详细信息
字符和字符串数组的排序顺序
MATLAB® 使用 UTF-16 字符编码方案将字符存储为 Unicode®。字符和字符串数组按 UTF-16 代码点顺序进行排序。对于同时也是 ASCII 字符的字符,此顺序意味着大写字母在小写字母之前。数字和某些标点符号也在字母之前。
提示
sortrows
函数提供了额外的灵活性,可基于矩阵或表输入的多列进行子排序。sort
函数和关系运算符对复数使用不同顺序。有关详细信息,请参阅关系运算。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
此函数支持 tall 数组,但存在以下限制:
您必须指定要排序的维度,如
sort(X,dim)
中所示。只有列向量支持对 tall 维度进行排序,如
sort(X,1)
中所示。
有关详细信息,请参阅 tall 数组。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
如果
A
是虚部全部为零的复数,则 MATLAB 可能会在调用sort(A)
之前将A
转换为real(A)
。在这种情况下,MATLAB 按real(A)
对A
进行排序,但生成的代码按abs(A)
对A
进行排序。要使生成的代码与 MATLAB 匹配,请使用sort(real(A))
或sort(A,'ComparisonMethod','real')
。请参阅具有零值虚部的复数数据的代码生成 (MATLAB Coder)。如果提供
dim
,则它必须为常量。当输入元胞数组是异构数组时,必须启用可变大小支持。
有关可变大小输入的限制,请参阅Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder)。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)