Data-structures-algorithms-insertion-sort-algorithm

提供:Dev Guides
移動先:案内検索

データ構造とアルゴリズムの挿入ソート

これは、インプレース比較ベースのソートアルゴリズムです。 ここでは、常にソートされるサブリストが維持されます。 たとえば、配列の下部はソートされるように維持されます。 このソートされたサブリストに「挿入」される要素は、適切な場所を見つけてから、そこに挿入する必要があります。 したがって、名前は*挿入ソート*です。

配列が順番に検索され、ソートされていない項目が移動され、ソートされたサブリスト(同じ配列内)に挿入されます。 このアルゴリズムは、その平均および最悪の場合の複雑さがΟ(n ^ 2 ^)であるため、大きなデータセットには適していません。

挿入ソートの仕組み

この例では、ソートされていない配列を使用します。

Unsorted Array

挿入ソートは、最初の2つの要素を比較します。

挿入ソート

14と33の両方がすでに昇順であることがわかります。 今のところ、14はソートされたサブリストにあります。

挿入ソート

挿入ソートは先に進み、33と27を比較します。

挿入ソート

そして、33が正しい位置にないことがわかります。

挿入ソート

33と27を入れ替えます。 また、ソートされたサブリストのすべての要素をチェックします。 ここで、ソートされたサブリストには要素が1つしかなく、27は14より大きいことがわかります。 したがって、ソートされたサブリストは、スワップ後もソートされたままになります。

挿入ソート

今では、ソートされたサブリストに14と27があります。 次に、33と10を比較します。

挿入ソート

これらの値はソートされた順序ではありません。

挿入ソート

そこで、それらを交換します。

挿入ソート

ただし、スワッピングにより27と10はソートされません。

挿入ソート

したがって、それらも交換します。

挿入ソート

再び、14と10が未ソートの順序で見つかります。

挿入ソート

再び交換します。 3回目の反復の終わりまでに、4つのアイテムのサブリストがソートされます。

挿入ソート

このプロセスは、ソートされていないすべての値がソートされたサブリストでカバーされるまで続きます。 ここで、挿入ソートのプログラミングの側面をいくつか見てみましょう。

アルゴリズム

これで、このソート手法がどのように機能するかについての全体像が得られたので、挿入ソートを実現できる簡単なステップを導き出すことができます。

Step 1 − If it is the first element, it is already sorted. return 1;
Step 2 − Pick next element
Step 3 − Compare with all elements in the sorted sub-list
Step 4 − Shift all the elements in the sorted sub-list that is greater than the
         value to be sorted
Step 5 − Insert the value
Step 6 − Repeat until list is sorted

疑似コード

procedure insertionSort( A : array of items )
   int holePosition
   int valueToInsert

   for i = 1 to length(A) inclusive do:

     /*select value to be inserted*/
      valueToInsert = A[i]
      holePosition = i

     /*locate hole position for the element to be inserted */

      while holePosition > 0 and A[holePosition-1] > valueToInsert do:
         A[holePosition] = A[holePosition-1]
         holePosition = holePosition -1
      end while

     /*insert the number at hole position*/
      A[holePosition] = valueToInsert

   end for

end procedure

Cプログラミング言語での挿入ソートの実装については、リンク:/data_structures_algorithms/insertion_sort_program_in_c [ここをクリック]を参照してください。