推导过程
package data_structure;
import java.util.Arrays;
public class selectdeduction {
public static void main(String[] args) {
int[] arr = {
5, 0, 1, 6, 4, 2};
select(arr);
}
public static void select(int[] arr) {
//第一轮
//假定当前最小数的索引就是0
int minIndex=0;
int min=arr[0];//最小数就是索引为0的那个数
for(int j=0+1;j<arr.length;j++) {
//因为上面假定最小的就是一个数了,所以这里0+1表示从第二个数开始比
if(min>arr[j]) {
//如果假定的数大于他后面那个数,说明假定的不是最小的数
min=arr[j];//就把最小的这个数赋给min(重置min)
minIndex=j;//就把这个数的下标赋给最小值的索引(重置索引
}
}
//将最小值放在arr[0]的位置上
arr[minIndex]=arr[0];//把最小值的下标放在数组的最前面去
arr[0]=min;//最小值就变成了下标为0的数
System.out.println("第一轮后:");
System.out.println(Arrays.toString(arr));
//第二轮
//假定当前最小数的索引就是0
minIndex=1;
min=arr[1];//最小数就是索引为0的那个数
for(int j=0+2;j<arr.length;j++) {
//因为上面假定最小的就是一个数了,所以这里0+1表示从第二个数开始比
if(min>arr[j]) {
//如果假定的数大于他后面那个数,说明假定的不是最小的数
min=arr[j];//就把最小的这个数赋给min(重置min)
minIndex=j;//就把这个数的下标赋给最小值的索引(重置索引
}
}
//将最小值放在arr[0]的位置上
arr[minIndex]=arr[1];//把最小值的下标放在数组的最前面去
arr[1]=min;//最小值就变成了下标为0的数
System.out.println("第二轮后:");
System.out.println(Arrays.toString(arr));
//第三轮
//假定当前最小数的索引就是0
minIndex=2;
min=arr[2];//最小数就是索引为0的那个数
for(int j=0+3;j<arr.length;j++) {
//因为上面假定最小的就是一个数了,所以这里0+1表示从第二个数开始比
if(min>arr[j]) {
//如果假定的数大于他后面那个数,说明假定的不是最小的数
min=arr[j];//就把最小的这个数赋给min(重置min)
minIndex=j;//就把这个数的下标赋给最小值的索引(重置索引
}
}
//将最小值放在arr[0]的位置上
arr[minIndex]=arr[2];//把最小值的下标放在数组的最前面去
arr[2]=min;//最小值就变成了下标为0的数
System.out.println("第三轮后:");
System.out.println(Arrays.toString(arr));
//第四轮
//假定当前最小数的索引就是0
minIndex=3;
min=arr[3];//最小数就是索引为0的那个数
for(int j=0+4;j<arr.length;j++) {
//因为上面假定最小的就是一个数了,所以这里0+1表示从第二个数开始比
if(min>arr[j]) {
//如果假定的数大于他后面那个数,说明假定的不是最小的数
min=arr[j];//就把最小的这个数赋给min(重置min)
minIndex=j;//就把这个数的下标赋给最小值的索引(重置索引
}
}
//将最小值放在arr[0]的位置上
arr[minIndex]=arr[3];//把最小值的下标放在数组的最前面去
arr[3]=min;//最小值就变成了下标为0的数
System.out.println("第四轮后:");
System.out.println(Arrays.toString(arr));
//第五轮
//假定当前最小数的索引就是0
minIndex=4;
min=arr[4];//最小数就是索引为0的那个数
for(int j=0+5;j<arr.length;j++) {
//因为上面假定最小的就是一个数了,所以这里0+1表示从第二个数开始比
if(min>arr[j]) {
//如果假定的数大于他后面那个数,说明假定的不是最小的数
min=arr[j];//就把最小的这个数赋给min(重置min)
minIndex=j;//就把这个数的下标赋给最小值的索引(重置索引
}
}
//将最小值放在arr[0]的位置上
arr[minIndex]=arr[4];//把最小值的下标放在数组的最前面去
arr[4]=min;//最小值就变成了下标为0的数
System.out.println("第五轮后:");
System.out.println(Arrays.toString(arr));
}
}
选择排序完整代码:
package data_structure;
import java.util.Arrays;
public class math {
public static void main(String[] args) {
int[] arr = {
5, -1, 4, 68, 24 };
selectsort(arr);
}
public static void selectsort(int[] arr) {
// 选择排序
//arr.length-1 代表轮询次数比数组长度少一
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;//假定最小的数就是第一个下标
int min =arr[i];//假定第一个数就是数组中最小的数
for(int j = i + 1;j<arr.length;j++) {
if(min>arr[j]) {
//说明不是最小值
min=arr[j];//重置min
minIndex=j;//重置minIndex
}
}
//将最小值放在min[0]里。即交换
if(minIndex != i) {
arr[minIndex]=arr[i];
arr[i]=min;
}
}
System.out.println(Arrays.toString(arr));
}
}
总结