思路
将数组分为已排序序列和待排序序列,已排序序列在前,待排序序列在后。从待排序序列中选出一个最小元素,与已排序序列之后的第一个元素(即待排序序列的第一个元素)进行交换,该元素会成为新的已排序序列的最后一个元素。
代码
public static void selectionSort(int[] arr) {
for(int i = 0; i < arr.length-1; i++) {
int minIndex = i;
for (int j = i; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(arr, i, minIndex);
}
}
}
性能分析
时间复杂度:
- 最好,顺序序列,不用做交换操作, O ( n 2 ) O(n^2) O(n2)
- 最差,逆序序列,每次迭代都要做交换操作, O ( n 2 ) O(n^2) O(n2)
- 平均, O ( n 2 ) O(n^2) O(n2)
空间复杂度:
O
(
1
)
O(1)
O(1)
稳定性: 不稳定,举例:5, 5, 2。