ソートアルゴリズム---バブルソート(Javaバージョン)

バブルソート

原理

バブルソートは、2つの隣接する要素を順番に比較して、2つの要素がサイズ関係の要件を満たしているかどうかを確認し、満たさない場合は2つの要素を交換する単純な並べ替えアルゴリズムです。各バブリングは、少なくとも1つの要素を本来あるべき位置に移動するため、n回のバブリングでn個のデータの並べ替えが完了します。このアルゴリズムの名前の由来は、要素が小さいほど、交換によってシーケンスの先頭にゆっくりと「フロート」するためです。

アルゴリズムプロセスの説明

  • 隣接する要素を比較します。最初のものが2番目のものよりも大きい場合は、2つを交換します。
  • 最初の最初のペアから最後の最後のペアまで、隣接する要素の各ペアに対して同じ作業を行い、最後の要素が最大数になるようにします。
  • 最後の要素を除くすべての要素について、上記の2つの手順を繰り返します。
  • 並べ替えが完了するまで、最初の3つの手順を繰り返します。

アルゴリズムの実行プロセスは、次の図に示すようにコードによって実装されます。
ここに画像の説明を挿入

public class BubbleSort {
    
    
    public static void main(String[] args) {
    
    
        int arr[] = {
    
    3, 9, -1, 10, 11};
        BubbleSort(arr);
    }

    public static int[] BubbleSort(int arr[]) {
    
    
        int temp = 0;
        //标志是否一次排序经过元素之间的交换
        boolean flag = false;
        for (int i = 0; i < arr.length - 1; i++) {
    
    
            for (int j = 0; j < arr.length - 1 - i; j++) {
    
    
                if (arr[j] > arr[j + 1]) {
    
    
                    flag = true;
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            System.out.println(Arrays.toString(arr));
            if (!flag) {
    
    
                break;
            } else {
    
    
                flag = false;
            }
        }
        return arr;
    }
}

1:バブルソートの時間計算量はどれくらいですか?

最良の場合、ソートされるデータはすでに順番に並んでおり、バブリング操作を実行する必要があるのは1回だけなので、最良の場合の時間計算量はO(n)です。最悪の場合、ソートされるデータはたまたま逆の順序であり、n回のバブリング操作を実行する必要があるため、最悪の場合の時間計算量はO(n2)です。

2:バブルソートのスペースの複雑さは何ですか?

バブリングプロセスは、隣接するデータの交換操作のみを含み、一定レベルの一時スペースのみを必要とするため、そのスペースの複雑さは、インプレースソートアルゴリズムであるO(1)です。

3:バブルソートは安定したソートアルゴリズムですか?

バブルソートでは、交換のみが2つの要素の順序を変更できます。バブルソートアルゴリズムの安定性を確保するため、隣接する2つの要素のサイズが等しい場合は交換せず、同じサイズのデータ​​でもソートの前後で順序が変わることはないため、バブルソートは安定したソートアルゴリズムです。

おすすめ

転載: blog.csdn.net/qq_33626996/article/details/113179064