直接挿入ソート
- 基本的な考え方:、レコードがソートされた配列中に挿入された注文であると考え、最初のレコードのシーケンスバックになります。
- 要素が挿入された後の最初のサイクル毎に指示されたと仮定します:DO大に小さい場合は端部は、プラグが必要でない場合、それが挿入される値よりも大きいです。値が[j]を等しくなるまでそれ以外の場合は、端から楽しみにして。その後もちろん、挿入位置は、[J + 1]です。
- コードは実装しています。上のセンチネル\([0] \)
- Sentinelは保持し、それが境界を決定するであろう
a[i]<a[j] && j>=0
void insertsort(int a[], int n){
for(int i=2;i<=n;i++){
if(a[i]<a[i-1]){
a[0] = a[i];
for(int j=i-1; a[0]<a[j]; j--){
a[j+1] = a[j];
}
a[j+1] = a[0];
}
}
}
- 宇宙複雑:\(。O(1)\)一定の補助スペース
- 時間計算:挿入要素\(N-1 \)倍、元の状態の数に依存する、移動する各比較ソートする配列
- ベストケース:命じ、各インサートの配列を、一つだけの比較、移動せず、\(O(N)\)
- 最悪の場合:配列、挿入要素を逆\(N-1 \)比較の合計最大数と、\(\ SUM \ limits_ I = {N-2} ^ {I} \) 、モバイルの最大総数(\ \和\ limits_ {I = 2} ^ N {(I + 1)} \)
- 平均場合:ランダムな要素は、所望の値は、最良の最悪平均を取り、約運動の合計数を比較することができる(\ nは^ 2/4 \ )
- これにより:アルゴリズムの直接挿入ソートの時間複雑\(O(N ^ 2) \) 実際のコードを見てすることも見ることができます
- 安定性:安定したソート
- それは確かに停止するように同じ要素を発生しますので、相対位置が変化しないように、比較的長く、より前方に移動しているので
- 適用性:順序とチェーン、ほとんどはソート順のためにのみ適しています(チェーンたときにも、フロントに振り返ることができます)
バイナリ・挿入ソート
- 場所は、最適化することができます。順序付けられたシーケンスよりも小さい値を検索し、あなたが半分を使用することができます