概述
這是一個相對簡單的排序算法。爲什麼這麼說呢?因爲不需要什麼思考,你就可以掌握並使用它。
版權說明
著作權歸作者所有。
商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
本文作者:Q-WHai
發表日期: 2016年5月24日
本文鏈接:http://blog.csdn.net/lemon_tree12138/article/details/51491810
來源:CSDN
更多內容:分類 >> 算法與數學
目錄
算法原理
選擇排序算法也需要將一個完整的序列切分成兩個部分,一個部分有序,一個部分無序。這一點它和插入排序是一致的。在前面我們說插入排序是將第 [i + 1] 個元素插入到第一部分的有序序列中,如果你還有印象的話。那麼在選擇排序中則是第 j 個元素(i < j <= n),插入到第 i 個位置。
下面這幅圖可以幫助你更好地理解這一點(當然你可以完全不需要圖解的幫助)。
算法步驟
- 序列會被人爲抽象地分成兩個部分,分別定義成序列 T1 和序列 T2(原始序列爲 T0)。
- 默認 T1 序列中的第 0 個元素是有序的(因爲只有一個元素 a[0] 嘛,自然是有序的);
- 從 i = 0 開始,每次從 T2 中選出一個最小的元素 a[minIndex],將 a[minIndex] 與 a[i] 進行交換;
- 重複過程 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( |
O( |
O( |
O(n) | 穩定 | 簡單 |
Ref
- 《大話數據結構》