挿入ソート
挿入ソート片手とトランプに配置された多くの人々のように動作します。最初は、私たちの左手はテーブルの上に空と次のカードの顔です。その後、毎回私たちはテーブルからカードを取り、左手で正しい位置に挿入します。図1に示すように、カードの正しい場所を見つけるには、右から左に、私たちは、すでに手に各カードとそれを比較します。
コードの実装
テンプレート< クラス T>
ボイド挿入ソート(T []、int型NUMS){
ため(intは iは= 1、I ++; I <NUMS ){
Tキー = [I]。
int型 J = - 1 ;
一方、(j> = 0 && A [j]> キー){
[J + 1 ] = [J]。
J - ;
}
[J + 1 ] = キー。
}
}
分割統治
構造には多くの有用なアルゴリズムは再帰的である:与えられた問題を解決するために、1つ以上のアルゴリズムは、再帰的に密接に関連したサブ多くの問題を解決するために自分自身を呼び出します。いくつかの小さな規模にオリジナルの問題ではなく、サブ問題の元の問題と同様に、再帰的にこれらのサブ問題を解決するために、その後、元の問題の解決策を確立するために、これらのサブ問題の解決策を組み合わせる:これらのアルゴリズムは、一般的に分割統治の考えに従ってください。
各再帰モデルでのパーティションが持つ3つのステップ:
- 分解いくつかのサブ問題に元の問題を、これらのサブ問題は元の問題の小さい例です。
- 解決再帰的に各サブ問題を解決する、これらのサブ問題を。その後、サブ問題の大きさが十分に小さい、直接的な解決策である場合。
- 複合元の問題に問題のこれらのサブ溶液の溶液。
ソートマージサブルールモードに完全に準拠したアルゴリズムを。次のように直感的に動作します。
- 分解:配列を有するn個の要素は、それぞれN / 2要素を有する二つのサブシーケンスに分類することができます。
- 解決策:マージソートを再帰的に2つの整列された配列。
- マージ:マージ2つの配列はソートされました。
ソートする列の長さが1の場合、再帰的には、各シーケンスの長さがソートされているので、この場合はすべての作業をしない「上昇し始めました」。
コードの実装
テンプレート< クラス T>
ボイドマージ(T []、INT P、整数 qは、INT R){
int型 N1 = Q - P + 1、N 2 = R - Q。
T *左= 新しい T [N1 + 1 ]、*右= 新しい T [N2 + 1 ]。
以下のために(INT iが= 0 ; I <N1; I ++ ){
左の[I] = [P + I]。
}
[N1]左 = マックス。
以下のための(int型 I = 0; I <n2は、I ++ ){
右[I] = [Q + I + 1 ]。
}
右[N2] = マックス;
int型私は= 0、J = 0 ;
用(int型、K <= R、K = P K ++ ){
場合(左の[I] < 右[J]){
[k]が。= [i]は左;
I ++ ;
}
他{
[K] = 右の[J]。
J ++ ;
}
}
}
テンプレート< クラス T>
ボイドマージ(T []、INT P、INT R){
場合(P < R){
int型 Q =(P + R)/ 2 。
マージ(P、Q)。
マージ(Q + 1 、R)。
マージ(A、P、Q、R)。
}
}