步骤:
首先在未排序序列中找到最小元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕
动图:
代码实现:
// 时间复杂度 O(n^2),空间复杂度O(1) ,不稳定
public static void selectSort(int[] arr) {
// 0-n找最小 1-n找最小 2-n找最小
for (int i = 0; i < arr.length; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
}
swap(arr, i, minIndex);
System.out.print("第" + (i + 1) + "趟排序结果:");
printArr(arr);
System.out.println();
}
}
public static void main(String[] args) {
int[] arr = {3,1,5,2,4};
printArray(arr);
selectSort(arr);
printArray(arr);
}
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void printArray(int[] arr) {
if (arr == null) {
return;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}