选择排序基本思想:
从最开始将第一个数作为最小数,然后依次向后比较,如果遇到比其小的就将下标赋给最小数,继续向后比较,一次比较完成后就找到了最小的值,然后交换数据;重复上述过程。
/**
* 选择排序
* 注意:
* 索引在第一层循环的下面:每循环一次都可以初始化索引的值indexMin = i;让默认最小值的索引为下一个数组的索引
* 循环中的数组长度要-1,不然会出现数组下标越界
*/
public class Choose {
public static void main(String[] args) {
int[] arr = {3, 2, 8, 5};
choose(arr);
}
public static void choose(int[] arr) {
//边界检查:防止数组下标越界
if (arr == null || arr.length < 2) {
return;
}
int len = arr.length;
System.out.println(len);
//每循环一次都可以初始化索引的值indexMin = i;让默认最小值的索引为下一个数组的索引
for (int i = 0; i < len - 1; i++) {
int indexMin = i;
//目的:挨个将默认的最小数组与后面的数组比较,发现比其小的,就将该下标赋值给indexMin,直到循环结束
//len-1是为了防止数组下标越界
for (int j = i; j < len - 1; j++) {
if (arr[j + 1] < arr[indexMin]) {
indexMin = j + 1;
}
}
//if判断:可以节省替换次数,节省内存,提高效率
if(indexMin != i){
//将最小值与最前面的值交换
replace(arr, i, indexMin);
}
}
System.out.println(Arrays.toString(arr));
}
//交换
public static void replace(int[] arr, int indexMin, int i) {
int temp = arr[i];
arr[i] = arr[indexMin];
arr[indexMin] = temp;
}
}