算法__選擇排序

   之前寫到過冒泡排序。但是,冒泡排序需要一個個比較,交換位置。這樣會有很多的讀寫操作,會影響cpu效率。所以,出現了選擇排序。選擇排序,每次循環選擇最小的數字與這次循環的第一位置的數字,交換位置,直至最後。舉個例子,說明一下:

7 2 5 1 3 4 8 6

第一輪:

           1. 7 和2比較,2小,最小變量minNumber=2;

           2. 2和5比較, 2小,最小變量minNumber=2;

           3. 2和1比較,1小,最小變量minNumber=1;

           4. 1和3比較,1小,最小變量minNumber=1;

           5. 1和4比較,1小,最小變量minNumber=1;

           6. 1和8比較,1小,最小變量minNumber=1;

           7. 1和6比較,1小,最小變量minNumber=1,1和7交換;

1 2 5 7 3 4 8 6

第二輪:

          1.  2和5比較,2小,最小變量minNumber=2;

          2.  2和7比較,2小,最小變量minNumber不變;

          3.  2和3比較,2小,最小變量minNumber不變;

          4.  2和4比較,2小,最小變量minNumber不變;

          5.  2和8比較,2小,最小變量minNumber不變;

          6.  2和6比較,2小,最小變量minNumber不變;

1 2 5 7 3 4 8 6

第三輪:

1 2 3 7 5 4 8 6

第四輪:

1 2 3 4 5 7 8 6

第五輪:

1 2 3 4 5 6 8 7

第六輪

1 2 3 4 5 6 7 8

代碼如下:

private int[] choseSort1(int[] array) {
        int temp;
        for (int i = 0; i < array.length; i++) {
            temp = i;
            for (int j = i + 1; j < array.length; j++) {
                temp = array[j] < array[temp] ? j : temp;
            }
            if (temp != i) {
                array[i] ^= array[temp];
                array[temp] ^= array[i];
                array[i] ^= array[temp];
            }
        }
        return array;
    }

優點: 減少了冒泡排序的每次交換;

缺點:不穩定,之前數字大小一樣的值,相對位置可能改變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章