1、算法步骤
1、在所有的元素中,找出最小(大)的元素,然后和首位元素交换位置 2、再从剩下的元素中,找出最小(大)的元素,和第二个元素交换位置 3、重复步骤2,直到最后一个元素
2、代码实现
public class SelectionSort {
public static void selectionSort(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
int len = arr.length;
// 循环的次数
for (int i = 0; i < len; i++) {
// 最小值所在的索引
int minIndex = i;
// 从下一个元素,开始和当前minIndex所在元素比较
for (int j = i + 1; j < len; j++) {
int current = arr[j];
// 如果当前值,小于minIndex索引处的值,更新minIndex的值
if (current < arr[minIndex]) {
minIndex = j;
}
}
// 交换值
if (minIndex != i) {
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
}
3、复杂度分析
因为不管序列如何,都要从头遍历到尾,所以时间复杂度平均为O(n2),空间复杂度为O(1)。