標籤:void 代碼實現 blog 元素 最小 排序 記錄 log 時間複雜度
演算法簡介
選擇排序就是找到數組中最小元素將其和數組第一個元素交換位置,然後在剩下的元素中找到最小元素並將其與數組第二個元素進行交換,以此類推,直至整個數組排序結束。
演算法描述
- 找到數組中最小元素並將其和數組第一個元素交換位置
- 在剩下的元素中找到最小元素並將其與數組第二個元素交換,直至整個數組排序
代碼實現
/** * 選擇 * * @param array */ private static void selectionSort(int[] array) { if (array == null || array.length == 0 || array.length == 1) return; int min; for (int i = 0; i < array.length - 1; i++) { min = i; for (int j = array.length - 1; j > i; j--) { if (array[j] < array[min]) min = j;//將最小數的索引儲存 } //最小元素與第i位置元素互換 if (array[i] > array[min]) { int temp = array[i]; array[i] = array[min]; array[min] = temp; } } }
效能分析
最好情況:交換 0 次,但是每次都要找到最小的元素,因此時間複雜度為$ O(n^2) $。
最壞情況:交換 \(n-1\)次,但是每次都要找到最小的元素,因此時間複雜度為$ O(n^2) $。
平均情況下時間複雜度為$ O(n^2) $。
因為需要一個臨時變數來交換元素位置和一個變數記錄最小位置,(另外遍曆序列時自然少不了用一個變數來做索引),所以其空間複雜度為\(O(1)\)。
由於每次都是選取未排序序列R中的最小元素 a 與 R 中的第一個元素交換,很可能破壞了元素間的相對位置,因此選擇排序是不穩定的。
| 排序演算法 |
平均時間複雜度 |
最好情況 |
最壞情況 |
空間複雜度 |
穩定性 |
| 選擇排序 |
\(O(n^2)\) |
\(O(n^2)\) |
\(O(n^2)\) |
\(O(1)\) |
不穩定 |
排序演算法-選擇排序