选择排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的
package 选择排序;
import java.util.Arrays;
import java.util.Scanner;
public class SelectSort {
public static void main(String[] args) {
int[] arr = {5, 4, 1, 2, 9};
System.out.println("原数组:"+Arrays.toString(arr));
selectSort(arr);
System.out.println("排序后:"+Arrays.toString(arr));
}
public static void selectSort(int[] arr) {
/*//第一轮
int minIndex = 0;//第二轮的话 minIndex=1
int min = arr[0];//第二轮 min=arr[1]
for (int j = 0 + 1; j < arr.length; j++) { //第二轮:int j=1+1
if (min > arr[j]) {//说明假定的最小值不小
min = arr[j];//重置min
minIndex = j;//重置minIndex
}
}
//将最小值放在arr[0] 即交换
if (minIndex != 0) {//第二轮的话 minIndex!=1 这样做是为了避免没有排序就是上一伦已经把顺序确定好了,再执行下面的也是白执行
arr[minIndex] = arr[0];//第二轮:arr[minIndex]=arr[1];
arr[0] = min;//第二轮 arr[1]=min;
}*/
for (int i = 0; i < arr.length - 1; i++) {//一共有arr.leng-1轮排序
int minIndex = i;
int min = arr[i];
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {//如果是从大到小只需要min<arr[j]
min = arr[j];
minIndex = j;
}
}
//将最小值放在arr[0] 即交换
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;//
}
System.out.println("第"+(i+1)+"轮:"+ Arrays.toString(arr));
}
}
}