选择排序
比如我们有数组[5,4,3,2,1]
选择排序的思想就利用两个for
循环,第一个for循环选出一个最小值,然后在第二个循环中,使用该最小值进行依次比较,如果存在最小值则进行替换
如下:
数组[5,4,3,2,1],我们假定最小值是arr[0]=5
那么我们将arr[0]依次与arr[1] — arr[4]进行比较,发现比arr[0]还要小的值则替换arr[0]
public class SelectSort {
public static void main(String[] args) {
int[] arr = {5,4,3,2,1};
selectsort(arr);
System.out.println(Arrays.toString(arr));
}
public static void selectsort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;//最小数的索引
int min = arr[i];//假设arr[i]是最小值
//拿到最小数的下标
//这个循环取的值永远是上一个循环取值的下一个值
//第一轮 从第一个循环中取到arr[0],然后用arr[0]在第二个循环中与arr[1]--arr[n] 依次比较,取得一个最小值
//第二轮 在第一个循环中取得arr[1],用arr[1]与第二个循环中的arr[2]--arr[n]依次比较,取得一个最小值
// ...
for (int j = i + 1; j < arr.length; j++) {
/**
* 如果是从大道小 => min < arr[j]
*/
if (min > arr[j]) {//说明假定的最小值,并不是最小
min = arr[j];//重置min
minIndex = j;//重置minindex
}
}
//将最小值,放在arr[0],交换
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;//取小
}
}
}
}