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 = 3×2 string
"Jones" "Adams"
"Petrov" "Burns"
"Santos" "Morita"
对每一行中的字符串进行排序。
B = sort(A,2)
B = 3×2 string
"Burns" "Santos"
"Jones" "Morita"
"Adams" "Petrov"
创建一个由 datetime
值构成的数组,然后按升序排序,也就是从最早到最近的日历日期排序。
ds = {'2012-12-22';'2063-04-05';'1992-01-12'}; A = datetime(ds,'Format','yyyy-MM-dd')
A = 3×1 datetime
2012-12-22
2063-04-05
1992-01-12
[B,I] = sort(A)
B = 3×1 datetime
1992-01-12
2012-12-22
2063-04-05
I = 3×1
3
1
2
B
列出排序后的日期以及包含 A
的相应索引的 I
。
使用索引数组 I
从原始数组直接访问排序后的元素。
A(I)
ans = 3×1 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 = 1×6 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
是标量,则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
复数支持: 是
沿其运算的维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 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
排序方向,指定为 'ascend'
或 'descend'
。当 A
是元胞数组时,不支持 direction
,即,sort
仅按升序排序。
名称-值参数
以 Name1=Value1,...,NameN=ValueN
的形式指定可选参量对组,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: sort(A,'MissingPlacement','last')
缺失值(NaN
、NaT
、<undefined>
和 missing
)的位置,指定为逗号分隔的对组,包含 'MissingPlacement'
和下列项之一:
'auto'
- 缺失的元素放在最后(对于升序排序)或放在最前面(对于降序排序)。'first'
- 缺失的元素放在最前面。'last'
- 缺失的元素放在最后。
数值输入的元素比较方法,指定为逗号分隔的对组,包含 '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
的大小和类型均与 A
相同。
数据类型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
| cell
| categorical
| datetime
| duration
排序索引,以向量、矩阵或多维数组的形式返回。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 数组,但存在以下限制:
您必须指定要排序的维度,如
sort(X,dim)
中所示。只有列向量支持对 tall 维度进行排序,如
sort(X,1)
中所示。
有关详细信息,请参阅 tall 数组。
用法说明和限制:
对于输入参量
A
:不支持字符串输入数组。
如果输入数组是字符向量元胞数组且禁用可变大小,则所有字符向量元素的长度必须相同。
在生成的代码中,输入数组保持复数,即使其所有元素都具有零值虚部也是如此。在这些情况下,生成的代码产生的结果可能与 MATLAB 产生的结果不同。请参阅具有零值虚部的复数数据的代码生成 (MATLAB Coder)。
如果使用参量
direction
,它在代码生成时必须为常量。
请参考“C/C++ 代码生成”一节中的用法说明和限制。同样的限制也适用于 GPU 代码生成。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
sort
函数完全支持 GPU 数组。要在 GPU 上运行该函数,请将输入数据指定为 gpuArray
(Parallel Computing Toolbox)。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
用法说明和限制:
不支持表、时间表和日期时间输入。
有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)