原理:每次从该数组中选择最小的那个数,与该数组中第一个元素进行交换
接下来代码实现,会打上详细的注释,看懂后希望给作者点个赞,支持原创
public class SelectionSort {
public void sort(int[] nums) {
//这里i < nums.length - 1是因为一共n - 1轮排序,因为每次都是挑最小的,挑完n - 1次后,最后一个n肯定是最大的数字
for(int i = 0; i < nums.length - 1; i++) {
//默认最小值为本轮循环的第1个值,后续排序会将数组分为连个数组,前面的为已经排好序的,而默认的最小值就是后面未排序数组的第1位
int min = nums[i];
//最小值的索引位置
int minIndex = i;
//这里j为i后面的那个。意思是从i之后的元素开始进行比较
for(int j = i + 1; j < nums.length; j++) {
//如果最小值 > nums[j],说明假定的min并不是最小的
if(min > nums[j]) {
min = nums[j]; //重置min
minIndex = j; //重置minIndex
}
}
//本轮for循环结束,说明本轮已经在数组中定位到了最终min和minIndex
//本来默认minIndex为i,如果此时 minIndex != i 了,说明发生过重置,这里进行最小值和第一位数字进行交换的操作
if(minIndex != i) {
//完成交换
nums[minIndex] = nums[i]; //nums[i]即为第一位,此时不是最小值,先把大值给假的minIdex
nums[i] = min; //nums[i]即为第一位,此时已经得到最小值了
}
}
//结束最终的for循环
System.out.println(Arrays.toString(nums));
}
}



