sort
配列要素の並べ替え
説明
は並べ替えのための追加パラメーターを指定します。たとえば、B = sort(___,Name,Value)sort(A,'ComparisonMethod','abs') は A の要素を大きさの順に並べ替えます。
例
行ベクトルを作成してその要素を昇順に並べ替えます。
A = [9 0 -7 5 3 8 -10 4 2]; B = sort(A)
B = 1×9
-10 -7 0 2 3 4 5 8 9
行列を作成してその各行を昇順に並べ替えます。
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 以降、二重引用符を使用して string 配列を作成し、関数 sort を使用して並べ替えられるようになりました。Unicode® の辞書順に従って string 配列の各列にある文字列を並べ替えます。
A = ["Santos","Burns"; ... "Jones","Morita"; ... "Petrov","Adams"]; B = sort(A)
B = 3×2 string
"Jones" "Adams"
"Petrov" "Burns"
"Santos" "Morita"
各行の string を並べ替えます。
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 は、並べ替えられた日付を一覧表示し、I は、対応する A のインデックスを含みます。
並べ替えた要素に元の配列から直接アクセスするには、インデックス配列 I を使用します。
A(I)
ans = 3×1 datetime
1992-01-12
2012-12-22
2063-04-05
関連データを対応する要素に格納した 2 つの行ベクトルを作成します。
X = [3 6 4 2 1 5]; Y = ["yellow" "purple" "green" "orange" "red" "blue"];
まずベクトル X を並べ替えてから、ベクトル Y を X と同じ順序で並べ替えます。
[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 の配列を作成し、要素を 3 番目の次元に沿って昇順に並べ替えます。
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が文字ベクトルの cell 配列または string 配列の場合、sort(A)は UTF-16 文字エンコード スキームのコードの順序に従って要素を並べ替えます。並べ替えでは大文字小文字が区別されます。文字配列と string 配列の並べ替えの詳細については、文字配列と string 配列の並べ替え順序を参照してください。Aが string 配列の場合、sortは配列の要素を並べ替えますが、string 内の文字は並べ替えません。Aが categorical 配列の場合、並べ替え順序は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 が cell 配列の場合、dim はサポートされないため、sort はサイズが 1 でない最初の配列の次元のみに沿って動作します。
データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
並べ替える方向。'ascend' または 'descend' として指定します。A が cell 配列の場合、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が複素数の場合はabs(A)を基準にして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® として保存します。文字配列と string 配列は UTF-16 コード ポイント順に基づいて並べ替えられます。ASCII 文字でもある文字の場合、この順序では大文字が小文字よりも前になることを意味します。数字と一部の記号も文字より前にあります。
ヒント
関数
sortrowsは、行列または table 入力の複数の列にわたるサブソート機能の柔軟性を高めます。関数
sortと関係演算子は、複素数に対して異なる並べ替えを使用します。詳細については、関係演算を参照してください。
拡張機能
この関数は tall 配列を制限付きでサポートしています。
sort(X,dim)のように、並べ替える次元を指定しなければなりません。sort(X,1)のように、tall 次元の並べ替えは列ベクトルでのみサポートされています。
詳細については、tall 配列を参照してください。
使用上の注意および制限:
入力引数
Aでは、次のようになります。string の入力配列はサポートされていません。
入力配列が文字ベクトルの cell 配列で、可変サイズが無効になっている場合、すべての文字ベクトルの要素が同じ長さでなければなりません。
生成コードにおいて、入力配列はその全要素の虚数部の値がゼロであっても複素数のままになります。この状況では、生成コードで出力される結果が MATLAB で出力される結果と異なることがあります。ゼロ値の虚数部をもつ複素数データのコード生成 (MATLAB Coder)を参照してください。
direction引数を使用する場合、コード生成時に定数でなければなりません。
使用上の注意および制限については、「C/C++ コード生成」セクションを参照してください。GPU コード生成にも同様の、使用上の注意および制限が適用されます。
sort 関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
sort 関数は、GPU 配列を完全にサポートします。GPU 上で関数を実行するには、入力データを gpuArray (Parallel Computing Toolbox) として指定します。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
sort 関数は分散配列をサポートしますが、次の使用上の注意および制限があります。
table 入力、timetable 入力、datetime 入力はサポートされません。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入sort 関数で、int8 型、uint8 型、int16 型、uint16 型の配列の要素を並べ替えるときのパフォーマンスが向上しています。この向上は、並べ替える要素数が多いときに最も顕著になります。
たとえば、次のコードでは、int8 型の 100,000,000 要素の列ベクトルを並べ替えています。以前のリリースと比較して、このコードは約 5.0 倍速くなっています。
function timingTest A = randi(intmax("int8"),[1e8 1],"int8"); S = @() sort(A); t = timeit(S) end
おおよその実行時間は以下のとおりです。
R2025b: 1.06 秒
R2026a: 0.21 秒
このコードの時間測定では、Windows® 11、AMD EPYC™ 74F3 24 コア プロセッサ (3.19 GHz) 搭載のテスト システムで、関数 timingTest を呼び出しました。
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.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の 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)