前言
选择排序即每一次都从参与比较的数据中找出最小值,然后用最小值和参与比较的这堆最前面的元素进行交换。即每一次交换都可以把剩下的数据里面最小的那一个放到最左边。
每一次的交换都具有意义(不像冒泡排序只要大于或者小于就交换),效率相对冒泡排序较高。
解释见代码:
package com.zjiedonl.javase.array;
/*
选择排序
*/
public class SelectSort {
public static void main(String[] args) {
//定义数组
int[] arr = {1,5,2,78,4};
//找出每一次循环的最小值,通过下标
//如果不是第一个元素最小就交换位置
for (int i = 0; i < arr.length-1; i++) {
//每一次循环最左边的就是i,只要前length-1个最小输出后,最后就是一个是最大的
//因为每一次循环就可以找到一个最小的,所以之后就可以不用管前面,所以j的下标不能从0开始
int min = i;//min下标就是每次循环最左边的,先把他的下标代表的数看做最小值进行比较,i+1就是第二个数
for (int j = i+1; j < arr.length; j++) {
if(arr[j]<arr[min]){
min=j;//如果后面的数比前面的小,交换下标
}
}
//如果min的值发生变化则交换,也可以直接交换不判断
if(i!=min){
int temp;//需要一个中间值进行暂时保存数据
temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
//循环打印输出
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}