排序算法系列:選擇排序算法

概述

這是一個相對簡單的排序算法。爲什麼這麼說呢?因爲不需要什麼思考,你就可以掌握並使用它。


版權說明

著作權歸作者所有。
商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
本文作者:Q-WHai
發表日期: 2016年5月24日
本文鏈接:http://blog.csdn.net/lemon_tree12138/article/details/51491810
來源:CSDN
更多內容:分類 >> 算法與數學


目錄


算法原理

選擇排序算法也需要將一個完整的序列切分成兩個部分,一個部分有序,一個部分無序。這一點它和插入排序是一致的。在前面我們說插入排序是將第 [i + 1] 個元素插入到第一部分的有序序列中,如果你還有印象的話。那麼在選擇排序中則是第 j 個元素(i < j <= n),插入到第 i 個位置。
下面這幅圖可以幫助你更好地理解這一點(當然你可以完全不需要圖解的幫助)。

這裏寫圖片描述


算法步驟

  1. 序列會被人爲抽象地分成兩個部分,分別定義成序列 T1 和序列 T2(原始序列爲 T0)。
  2. 默認 T1 序列中的第 0 個元素是有序的(因爲只有一個元素 a[0] 嘛,自然是有序的);
  3. 從 i = 0 開始,每次從 T2 中選出一個最小的元素 a[minIndex],將 a[minIndex] 與 a[i] 進行交換;
  4. 重複過程 3,直到序列 T2 中的元素全部被填入到序列 T1

算法實現

/*
     * 排序算法的核心模塊
     * 
     * @param array
     *      待排序數組
     */
    private void sortCore(int[] array) {
        int arraySize = array.length;

        for (int i = 0; i < arraySize; i++) {
            int minValue = Integer.MAX_VALUE;
            int minIndex = 0;
            for (int j = i; j < arraySize; j++) {
                if (minValue > array[j]) {
                    minValue = array[j];
                    minIndex = j;
                }
            }

            ArrayUtils.swap(array, minIndex, i);
        }
    }

算法複雜度

排序方法 時間複雜度 空間複雜度 穩定性 複雜性
平均情況 最壞情況 最好情況
選擇排序 O(n2 ) O(n2 ) O(n2 ) O(n) 穩定 簡單

Ref

  • 《大話數據結構》

Github源碼下載


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