**基本介绍:**选择式排序也属于内部排序,是从欲排序的数据中,按指定的规则选出某一元素,再依照规定交换位置后达到排序的目的。
说明:
1、选择排序一共有数组大小-1轮排序
2、每1论排序,又是一个循环,
2、1先假定当前这个数是最小数
2、2然后和后面的每个数进行比较,如果发现有比当前更小的数,就重新确定最小数;
2、3当遍历到数组的最后时,就得到本轮最小数和下标
2、3交换
代码演示:
package com.sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
//选择排序
public class SelectSort {
public static void main(String[] args) {
//int[] arr={101,34,119,1};
int[] arr=new int[80000];
for (int i = 0; i <80000; i++) {
arr[i]=(int) (Math.random()*9000000);
}
selectSort(arr);
//System.out.println("排序前"+ Arrays.toString(arr));
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(date);
System.out.println("排序前的时间是:"+format);
selectSort(arr);
//System.out.println("排序后"+ Arrays.toString(arr));
Date date1 = new Date();
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = simpleDateFormat1.format(date1);
System.out.println("排序前的时间是:"+format1);
}
//选择排序
public static void selectSort(int[] arr){
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
}
}
//将最小值,放在arr[0],即交换
if (minIndex != i) {//上一轮没有发生交换,minIndex的值就不会发生变化,就不会进来了;
arr[minIndex] = arr[i];
arr[i] = min;
}
// System.out.println("第"+(i+1)+"轮后--");
// System.out.println(Arrays.toString(arr));
}
//使用逐步推导的方式来讲解选择排序
/*//第一轮排序
int minIndex =0 ;
int min = arr[0];
for (int j = 0+1;j< arr.length;j++){
if (min > arr[j]){//说明假定的最小值不是最小值
min = arr[j];//重置min
minIndex=j;//重置minIndex
}
}
//将最小值,放在arr[0],即交换
if (minIndex!=0){
arr[minIndex] = arr[0];
arr[0]=min;
}
System.out.println("第一轮后--");
System.out.println(Arrays.toString(arr));
//第二轮排序
minIndex =1 ;
min = arr[1];
for (int j = 1+1;j< arr.length;j++){
if (min > arr[j]){//说明假定的最小值不是最小值
min = arr[j];//重置min
minIndex=j;//重置minIndex
}
}
//将最小值,放在arr[0],即交换
if (minIndex!=1){
arr[minIndex] = arr[1];
arr[1]=min;
}
System.out.println("第二轮后--");
System.out.println(Arrays.toString(arr));
//第三轮排序
minIndex =2 ;
min = arr[2];
for (int j = 2+1;j< arr.length;j++){
if (min > arr[j]){//说明假定的最小值不是最小值
min = arr[j];//重置min
minIndex=j;//重置minIndex
}
}
//将最小值,放在arr[0],即交换
if (minIndex!=1){
arr[minIndex] = arr[2];
arr[2]=min;
}
System.out.println("第三轮后--");
System.out.println(Arrays.toString(arr));*/
}
}