[アルゴリズム]バブルソート(Bubble Sort)

2550 ワード

Intro
ソート・アルゴリズムは、次の2つに分類されます.
  • 簡単だが効率が低い方法:ソート、挿入ソート、バブルソート
  • を選択する.
  • 複雑だがより効率的な方法:高速ソート、hipソート、連結ソート、基数ソート
  • その中のBubbleソートについて議論します.
    泡の位置合わせ
    2つの隣接要素
  • を検査することによって並べ替えられるアルゴリズム
  • 2つの隣接要素
  • を比較し、サイズが順序付けされていない場合、交換する.
  • 選択ソートは、基本概念と類似しています.
  • ろんり

  • 1つの回転で、1番目の要素と2番目の要素、2番目の要素と3番目の要素、3番目と4番目の要素...この方法で最後の要素と最後の要素を比較し,条件に合わない場合は互いに交換する.

  • 1回目の回転では最大の要素が最後に移動するため、2回目の回転では先頭の要素がソートから除外され、2回目の回転では終点から2番目の要素がソートから除外されます.これにより、ソートを1回行うたびに、ソートから除外されるデータが1つ増加します.
  • int[] arr = {7, 6, 2, 4, 3, 9, 1};
    
    private static void sort(int[] arr) {
            for (int i = 0; i < arr.length; i++) { // 1
                for (int j = 0; j < arr.length - i - 1; j++) { // 2
                    if (arr[j] > arr[j + 1]) { // 3
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
    
                System.out.print((i + 1) + "단계 : ");
                print(arr);
            }
        }
    
    private static void print(int[] arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + " ");
            }
            System.out.println();
        }
    
    // 단계별 결과.
    1단계 : 6 2 4 3 7 1 9 
    2단계 : 2 4 3 6 1 7 9 
    3단계 : 2 3 4 1 6 7 9 
    4단계 : 2 3 1 4 6 7 9 
    5단계 : 2 1 3 4 6 7 9 
    6단계 : 1 2 3 4 6 7 9 
    7단계 : 1 2 3 4 6 7 9 
    「とにかく、前の数字が私より大きいなら、私と席を変えてください.
    私より小さいなら、後ろの数字からチェックします."

  • 最初のfor文は、除外する要素の数を表します.1回転終了後、配列の最後の位置に最大の要素を追加して位置させます.2番目のラウンドが終了すると、アレイの最後の2つの位置に2つの大きな要素が位置合わせされるので、2つを除いてください.この部分はコードのarr.length-i-1です.
    上記の内容を理解すれば,なぜ総数からiを減算したのか理解できる.

  • 2番目のfor文は、要素を比較するインデックスfor文を選択します.jは0からarr.length-i-1に増加した.ゼロから、現在の要素と次の要素を指します.

  • ドアで標準の数字と現在チェックしている数字を比較すると、標準の数字が現在チェックしている数字より大きいと、大きい数字は小数より前になるので、位置を変えます.
  • 時間の複雑さ
    (n-1) + (n-2) + (n-3) + ... + 2+1->n/(n-1)/2はO(n^2)である.
    Bubbleソートは、2つの要素の最悪、最良および平均時間複雑度O(n^2)を比較するものである.
    くうかんふくざつさ
    与えられた配列で実行されるので、O(N)となる.
    長所
  • は簡単で、ソースコードが直感的です.
  • は、ソートされたデータをソートするときに最も速い.👍
  • は、ソートする配列をソートする方法であり、他のメモリ領域は必要ありません.
  • 安定したソート.
  • 短所
    24172❌は時間的複雑度が最も悪く,最も良く,平均はO(n^2)であるため効率が低下する.
  • は、他のソートに比べてソート速度が遅い.
  • 交換回数が多いですね.
  • 逆順配列が最も遅い.🤯
  • Reference
  • Ready-For-Tech-Interview