數據結構與算法_選擇排序

我是野豬。

排序: 將雜亂無章的數據元素,通過一定的方法按關鍵字順序排列的過程叫做排序。對數據進行排序有可能是檢索的一個初始步驟。二分查找比線性查找要快的多,然而它只能應用於有序的數據。其次排序非常重要也可能非常耗時。


冒泡排序、選擇排序和插入排序都是簡單排序,算法時間複雜度都是O(n^2)。

選擇排序:

第1次循環遍歷範圍是[1,n]選出最小的,與最左邊[0]交換;

第2次循環遍歷範圍是[2,n]選出最小的,與最左邊[1]交換;
............................................................................................
第n-1循環遍歷範圍[n-1,n]選出最小的,與最左邊[n-1]交換;
顯然比較的次數還是O(n^2) ,但是交換的次數卻是O(N);

所以選擇排序和冒泡排序相比比較次數都是O(n^2),但是選擇排序無疑更快,因爲它進行的交換要少得多,是O(N)級的。


java代碼:

/**
 * 選擇排序
 * 概念:1 遍歷範圍是[1,n]選出最小的,與最左邊[0]交換;
 * 2 遍歷範圍是[2,n]選出最小的,與最左邊的[1]交換
 * ....
 * n-1  遍歷範圍[n-1,n]選出最小的,與最左邊的[n-1]交換;
 * <p>
 * 顯然比較的次數還是O(N方) ,但是交換的次數卻是O(N);
 * <p>
 * 所以選擇排序和冒泡排序比較次數都是O(N方),但是選擇排序無疑更快,因爲它進行的交換要少得多
 */

public class SelectionSort {
    public static void main(String[] args) {

        int sore[] = {3, 1};

        for (int i = 0; i < sore.length; i++) {
            int min = i; //假定當前座標對應的值最小
            for (int j = i + 1; j < sore.length; j++) {
                if (sore[min] > sore[j]) {
                    min = j;
                }
            }

            if (min != i) { //因爲每次都是從最左邊開始 若min不等於i,說明找到最小值 交換
                int temp = sore[i];
                sore[i] = sore[min];
                sore[min] = temp;
            }
        }

        System.out.println("選擇排序後(從小到大):");
        for (int i = 0; i < sore.length; i++) {
            System.out.println(sore[i] + "\t");
        }
    }
}
如果有問題,請及時指出。

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