选择排序的执行顺序
选择排序刚开始的时候默认:第一个数为min(最小值),默认最小值下表是0,通过这两个东西实现的目标是:
每次选择排序都能选出最小的那个值
第一次选择排序:是拿1与后边的数(3\-2\4\5)来比较 比较下来后的结果是min=-2然后最小值的下标改为-2的下标2
注意的是:min 和 minindex是用来交换的
然后第一次选择排序后是:-2 3 1 4 5
第二次选择排序min=3因为i++,然后3与(1、4、5)比较1最小-》通过将1的下标给minindex,然后交换1,3,这样第二小的数
就被选出来了
代码如下
package 排序;
/**
* @author 邓雪松 (づ ̄ 3 ̄)づ)
* @create 2021-10-31-16-49
*/
public class 选择排序 {
public static void main(String[] args) {
int[] ints = new int[]{-2,3,5,1,2};
selectSort(ints);
for(int anInt:ints){
System.out.print(anInt+" ");
}
}
//选择排序
public static void selectSort(int[] arr){
//外层循环是选择排序的次数(arr.length-1)
for (int i = 0; i < arr.length-1; i++) {
//默认min和minindex为arr[i]然后与后面的数比较
int min = arr[i];
int minindex = i;
//内层循环就是来用arr[i]和arr[i]后边的数比较
for(int j=i+1;j<arr.length;j++){
//如果找到比arr[i]默认小的数的话那么吧最小的那个下标给minindex用来交换
if(min>arr[j]){
min = arr[j];//min就相当于临时存最小值的变量
minindex = j;
}
}
//如果i不等于minindex说明:arr[i]不是最小的那个数,不是的话那就交换呗
if(i!=minindex){
arr[minindex]=arr[i];//就想但与吧最小的那个值赋值为arr[i]了
arr[i]=min;//然后将最小值给arr[i]
}
}
}
}
运行结果如下
-2 1 2 3 5