排序算法之選擇排序

原理:

  • 首先,找到數組中最小的那個元素,其次,將它和數組的第一個元素交換位置(若是第一個元素就是最小元素那麼它就和本身交換)
  • 其次,在剩下的元素中找到最小的元素,將它和數組的第二個元素交換位置。如此往復,直到將整個數組排序交換元素的代碼寫在內循環中,每次交換都能排定一個元素,所以交換的總次數是N。因此算法的時間效率取決於比較的次數。

特色:

運行時間與輸入無關。爲了找出最小的元素而掃描一遍數組並不能爲下一遍掃描提供什麼信息,即使一個已經有序的數組和一個隨機排列的數組所用的排序時間也是同樣的。數據移動是最少的。每次交換都會改變兩個元素的值,所以選擇排序用了 N 次交換。算法

代碼實現數組

public static void sort(int[] a) {
        // 將 a[] 按升序排列
        int len = a.length;
        for (int i = 0; i < len; i++) {
            int min = i;
            for (int j = i + 1; j < len; j++) {
                if (a[min] > a[j]) {
                    a[min] = a[min] ^ a[j]; // 進行交換
                    a[j] = a[min] ^ a[j];
                    a[min] = a[min] ^ a[j];
                }
            }
        }
    }
複製代碼

測試bash

public static void main(String[] args) {
        int[] a = {5,2,3,1,4,6,10};
        sort(a);
        for(int i = 0;i < a.length;i++){
            System.out.print(a[i] + " ");
        }
    }
複製代碼

排序效果測試

相關文章
相關標籤/搜索