排序动图
排序思路
每一轮找出最小的,放在起始位置。
排序流程
-
总共遍历几次?
因为最后一个元素也可能不是最小的,所以要遍历 n 次
-
每次遍历需要干什么?
找出最小元素的位置,与开始位置交替元素
代码实现
public static void selectSort(int[] arr) {
// 总共需要遍历 n 次,每个元素都需要遍历
for (int i = 0; i < arr.length; i++) {
// 默认第 i 个元素最小
int minIndex = i;
for (int j = i; j < arr.length; j++) {
// 如果当前元素小于最小元素,则替换最新元素的下标
if (arr[j] < arr[minIndex]) {
// 记录最下元素的那个下标
minIndex = j;
}
}
// 第 i 个元素与第 j 个元素互换
if (i != minIndex) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}