ソートアルゴリズム2.泡の位置合わせ

12272 ワード

🧶 ソートアルゴリズム

  • 選択ソート
  • 泡順
  • 挿入ソート
  • 連結ソート
  • クイックソート
  • ヒップホップソート
  • 今回はバブルランキング

    🎐 泡の位置合わせ


    Bubble Sort(Bubbleソート):2つの並べ替えられたデータの中で大きなデータを後方に送信し、ソートします.
  • のinsituソートアルゴリズムの1つ.
  • プロセス
    1.左から
    2.次の値と比較して、位置をサイズ順に交換します.
    3.次の値に移動し、その要素と次の要素を比較します.
    4.繰り返し

    🎢 インプリメンテーション

    public class BubbleSort {
        public int[] sort(int[] data) {
            for (int i = 0; i < (data.length - 1); i++) {
                for(int j = 0; j < (data.length - i - 1); j++) {
                    if (data[j] > data[j+1]) {
                        int temp = data[j];
                        data[j] = data[j+1];
                        data[j+1] = temp;
                    }
                }
            }
            return data;
        }
    }
    テストコード
    class BubbleSortTest {
    
        @Test
        void bubble_sort_test() {
            int[] answer = {1, 2, 3, 4, 5, 6, 7, 8, 9};
            int[] arr1 = {4, 1, 7, 9, 2, 5, 6, 3, 8};
            int[] arr2 = {2, 1, 8, 9, 4, 3, 6, 5, 7};
    
            BubbleSort bubbleSort = new BubbleSort();
    
            assertArrayEquals(answer, bubbleSort.sort(arr1));
            assertArrayEquals(answer, bubbleSort.sort(arr2));
    
            int[] arr3 = new int[100];
            Random random = new Random();
            for (int i = 0; i < 100; i++) {
                arr3[i] = random.nextInt(1000);
            }
            final int[] answer3 = Arrays.copyOf(arr3, arr3.length);
            Arrays.sort(answer3);
            assertNotEquals(Arrays.toString(answer3), Arrays.toString(arr3));// 정렬전에는 다르고
            assertArrayEquals(answer3, bubbleSort.sort(arr3));//정렬후에는 같아야 함
        }
    }
    テスト結果

    整理する

  • の利点
    -導入が容易
    -安定した配列.
    -余分なメモリ消費量が少ない.
  • の欠点
    −時間的複雑度はO(n^2)である.
    -交換プロセスが多い.