[アルゴリズム]ソートの挿入

1718 ワード

挿入位置合わせ!?

  • のカードの並べ替え方法と同じです.
  • の新しいカードを既存のソート済みカードの間の正しい位置に挿入します.
  • の2番目の要素から、前(要素)と比較して挿入位置を探し、要素を後ろに移動し、指定された位置に資料を挿入してソートするアルゴリズム.
  • の最適な場合,O(N)は非常に高速な効率を有し,他の並べ替えアルゴリズムの一部として利用できる優れた並べ替えアルゴリズムである.
  • ろんり

  • ソートは、2番目の位置の値を標準に格納する.
  • Standardと以前の要素と比較して、シフト挿入します.
  • 1を返し、次の場所の値を基準として指定し、この手順を繰り返します.
  • private static void insertionSort(int[] arr){
    	for(int i=1; i<arr.length; i++){
        	int standard = arr[i];
            int index = i-1;
            
            //넣을 위치를 찾았으니 그 뒤의 원소들을 한칸씩 뒤로 미는 과정
            while((0<=index) && standard < arr[index]){
            	arr[index+1] = arr[index];
                index--;
            }
            
            arr[index+1] = standard;        
        }
    
    }
  • 最初の要素の前(左側)に要素がないので、2番目の要素から探索を開始します.
  • 規格には基準位置値が一時的に記憶され、indexには基準位置より前の位置が記憶される.
  • より前の位置を指すインデックスは負数ではありません.前の位置値が1番で選択した基準位置の値より大きい場合は、右に1格移動します.次にindexをより古い位置に向けます.
  • 2号では、繰り返し文が終了すると、indexは標準位置に入るindex-1の位置を示す.
  • 2号の繰り返し文で、標準値より大きい位置を1つずつ右に押すので…!
  • したがって、
  • は(index+1)位置に標準を挿入する.
  • 時間の複雑さ

  • 最悪の場合(逆ソートの場合)、選択ソートと同様(n-1)+(n-2)+...+2+1->n(n-1)/2、すなわちO(n^2).
  • であるが、全て並べ替えると1回のみ比較されるため、O(N)の時間的複雑さがある.さらに、ソートされた配列にデータを挿入/削除すると、ナビゲーション以外にオーバーヘッドが非常に小さいため、これは実際には最良のソートアルゴリズムです.
  • 最適:O(N)
  • 平均値と最大値:O(N^2)
  • くうかんふくざつさ


    O(N)は、
  • によって与えられた配列において達成される.
  • 長所

  • アルゴリズムは簡単です.
  • ほとんどの要素がソートされている場合、非常に効率的である可能性があります.
  • は、ソートするアレイ内で交換する方法であり、他のメモリ領域は必要ありません.
  • 選択配列または泡配列と比較して比較的速い.
  • 短所

  • より多くの移行が含まれています.
  • は比較的大きな場合には向いていません.(アレイが長いほど効率が低下)
  • の平均化が最も悪い時間複雑度はO(n^2)であり,非効率であった.