シュワルツ変換
シュワルツ変換（シュワルツへんかん、）は、リストの要素のソートを効率良く行うためのプログラミングの手法の一つである。
このイディオム は、要素の順序が実際には要素のあるプロパティ（キー）の順序に基づいていて、キーの計算に多くの計算資源を要するため計算回数を最小限にしたい状況で行う比較ソートに適している。シュワルツ変換の特徴として、名前付きの一時配列を使わないことが挙げられる。

シュワルツ変換は LISP において （DSU）として知られるイディオムの一種であり、一時的に入力要素とキーを関連付けることでキーの再計算を避けるイディオムである。このアプローチはメモ化に似ていて、メモ化では特定の入力値に関連しているキーの再計算を避けている。比較すると、シュワルツ変換は各入力要素のキーを計算回数が厳密に一度であることを保証する。ただし、入力要素に重複がある場合、同値な要素に対して複数回キーの計算を行う。

シュワルツ変換の名はランダル・L・シュワルツ（）に因む。シュワルツは Perl 5 リリース直後の1994年にこのイディオムを Perl で初めて実装した。「シュワルツ変換」の語は専ら Perl の文脈でのみ用いられてきたが、後に Python など他のプログラミング言語のユーザの間でも、類似のイディオムに言及する際に用いられるようになった。しかしこのアルゴリズムは、シュワルツによる特定のイディオムとして Perl コミュニティの間で普及するより以前に、既に他の言語で（特定の名前を与えられずに）用いられている。「シュワルツ変換」の語は特定のイディオムを示すのであって、一般のアルゴリズムを示すのではない。

例として、リスト codice_1 を各語の長さに基づいて並び替えることを考える。
まず文字列と長さの配列からリスト codice_2 を生成し（）、次にタプルの数値に基づいてこのリストをソートし codice_3 を得て（）、最後にソート済みリスト要素から数値を取り除き（）、目的のリスト codice_4 を得る。このアルゴリズムの Perl での実装を以下に示す：

@sorted = map { $_->[0] }
 sort { $a->[1] <=> $b->[1] or $a->[0] cmp $b->[0] } # 先に長さを比較し、長さの等しい場合のみ文字列の比較を行う
 map { [$_, length($_)] } # 文字列の長さを計算する
 @unsorted;
Q27948
リスト
Concept
Q181593
ソート
Concept
Q80006
プログラミング
Concept
Q490173
イディオム
Concept
Q474715
順序
Concept
Q186152
配列
Concept
Q132874
LISP
Concept
Q1376168
メモ化
Concept
Q42478
Perl
Concept
Q245962
実装
Concept
Q28865
Python
MEDIA
Q9143
プログラミング言語
Concept
Q8366
アルゴリズム
Concept
Q184754
文字列
Concept
Q7433174
シュワルツ変換
Concept
Q7433174
シュワルツ変換
Concept
Q7433174
シュワルツ変換
Concept
Q7433174
シュワルツ変換
Concept
Q7433174
シュワルツ変換
Concept
Q7433174
シュワルツ変換
Concept
Q7433174
シュワルツ変換
Concept
2020-05-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
5
DATE
26-01-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
1994年
DATE
2020-01-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
1
DATE
2020-02-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
2
DATE
2020-03-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
3
DATE
2020-04-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
4
DATE
2020-01-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
1
DATE
2020-01-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
1
DATE
+1^^http://www.w3.org/2001/XMLSchema#decimal
1
NUMBER
+2^^http://www.w3.org/2001/XMLSchema#decimal
2
NUMBER
+3^^http://www.w3.org/2001/XMLSchema#decimal
3
NUMBER
+4^^http://www.w3.org/2001/XMLSchema#decimal
4
NUMBER
0^^http://www.w3.org/2001/XMLSchema#decimal
0
NUMBER
+1^^http://www.w3.org/2001/XMLSchema#decimal
1
NUMBER
+1^^http://www.w3.org/2001/XMLSchema#decimal
1
NUMBER
0^^http://www.w3.org/2001/XMLSchema#decimal
0
NUMBER
0^^http://www.w3.org/2001/XMLSchema#decimal
0
NUMBER
has quality
influenced by
instance of
influenced by
influenced by
use