选择排序是从第一个元素开始一次比较后面的元素,如果后面的元素比他小,就替换
假设第一轮 从 0 开始和 20 比较,0 《 20 不懂,继续向后探测,在探测过程中,我们记录下已测得的最小值(minVal)和最小值的下标(minVal_Index)
没有发现比它小的,所以开始从第二个数据,minVal = 20 minVAl_index = 1 向后找, ,
发现后面 2 《 20 将 minVal 置为 2 minValindex = 2 ,继续向后探测
直到最后,也没有比它小的,那么就让 2 和 20 交换
重复以上步骤,直到遍历到数据长度 -1 结束
/*
从小到大
@1 从第 i 个变量开始,记录为最小变量 min,保存其值和下标 minIndex
向后依次比较,如果 某个元素x小于它,就将x 赋值给 min,更新最小值下标,这样一来找到的值就是数组中最小的那个值
本轮循环结束后,将最小值和第一个变量交换
重复 @1
*/
public class SelectSort {
public static void sort(int[] arr){
// 遍历 length -1 次
for (int i = 0;i<arr.length-1;i++){
int min = arr[i]; // 初始每轮最小值
int minIndex = i; // 最小值下标
// 向后找,比最小值小的值
for (int j = i+1;j<arr.length;j++){
// 如果找到,就更新 min 和 minIndex ,
if (min > arr[j]){
// 更新最小值和
min = arr[j];
// 更新最小值的下标
minIndex = j;
}
}
// 如果本轮比较结束,并且 minIndex 还是 初始值 i 就证明没有找到比初始值还小的数据,
// 如果不等于,就证明找到了,执行下面的 if 条件
if (minIndex != i){
// 将最小值进行交换
arr[minIndex] = arr[i];
arr[i] = min;
}
}
}
}