冒泡排序和直接選擇排序

冒泡排序(平均時間複雜度O(n²))

按照從小到大排序

從左到右,數組中相鄰的兩個元素進行比較,交換位置,將較大的放到後面。

每一輪都能拍出一個最大值,總共需要n-1輪

比如:[2,5,4,9,8,7]
 

        int[] a = {2, 5, 3, 9, 6, 8};
        //第一次層循環控制輪數,最差n-1輪
        for (int i = 0; i < a.length - 1; i++) {
            //內層控制比較的次數
            // a.length -1 -i(剩餘需要比較的次數)
            for (int j = 0; j < a.length - 1 - i; j++) {
                if(a[j] > a[j + 1]){
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(a));

選擇排序(平均時間複雜度O(n²)

從第一個位置開始比較,找出最小的,和第一個位置互換,開始下一輪

        int[] a = {2, 5, 3, 9, 6, 8};
        //第一次層循環控制輪數,最差n-1輪
        for (int i = 0; i < a.length - 1; i++) {
            //假設第一個是最小的
            int index = i;
            //內層控制比較的次數
            // j = i + 1是當前第j個未排的開始
            for (int j = i + 1; j < a.length; j++) {
                if (a[j] < a[index]) {
                    index = j;
                }
            }
            if (index != i) {//最小值不在當前假設位置需要交換
                int temp = a[i];
                a[i] = a[index];
                a[index] = temp;
            }
        }
        System.out.println(Arrays.toString(a));

冒泡排序和選擇排序的比較

①冒泡排序實在比較的過程中交換,可能所有的位置都動過
   選擇排序是先記錄下位置,然後在這一輪比較結束後再交換位位置
②冒泡排序優缺點:優點:比較簡單,空間複雜度較低,是穩定的;
                                 缺點:時間複雜度太高,效率慢;
選擇排序優缺點:優點:一輪比較只需要換一次位置;
                             缺點:效率慢,不穩定

發佈了37 篇原創文章 · 獲贊 0 · 訪問量 1641
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章