图解
代码实现
package com.atguigu.sort;import java.util.Arrays;
import java.util.List;/*** @创建人 wdl* @创建时间 2021/3/21* @描述*/
public class SelectSort {public static void main(String[] args) {int []arr={101,34,119,1};System.out.println("排序前");System.out.println(Arrays.toString(arr));selectSort(arr);System.out.println("排序后");System.out.println(Arrays.toString(arr));}//选择排序public static void selectSort(int[] arr){//在推导的过程,我们发现了规律,因此可以使用for来解决//选择排序时间复杂度是O(n^2)for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;int min = arr[i];for (int j = 0 + i; j < arr.length; j++) {if (min > arr[j]) {//说明我们假定的最小值,并不是最小的min = arr[j];//重置minminIndex = j;//重置minIndex}}//将最小值,放在arr[0],即交换if (minIndex != i) {arr[minIndex] = arr[i];arr[i] = min;}System.out.println("第"+(i+1)+"轮后");System.out.println(Arrays.toString(arr));//1,34,119,101}//使用逐步推导的方式来,讲解选择排序//第1轮//原始的数组:101,34,119,1//第一轮排序: 1,34,119,101//算法先简单--》做复杂,就可以吧一个复杂的算法,拆分成简单的问题-》逐步解决// //第一轮
// 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));//1,34,119,101// //第二轮
// minIndex=1;
// min=arr[1];
// for (int j = 0+1+1; j < arr.length; j++) {
// if(min>arr[j]){
// //说明我们假定的最小值,并不是最小的
// min=arr[j];//重置min
// minIndex=j;//重置minIndex
// }
// }
// //将最小值,放在arr[1],即交换
// if (minIndex!=1){
// arr[minIndex]=arr[1];
// arr[1]=min;
// }
//
// System.out.println("第二轮后");
// System.out.println(Arrays.toString(arr));//1,34,119,101
//
// //第三轮
// minIndex=2;
// min=arr[2];
// for (int j = 0+1+1+1; j < arr.length; j++) {
// if(min>arr[j]){
// //说明我们假定的最小值,并不是最小的
// min=arr[j];//重置min
// minIndex=j;//重置minIndex
// }
// }
// //将最小值,放在arr[2],即交换
// if (minIndex!=2){
// arr[minIndex]=arr[2];
// arr[2]=min;
// }
//
// System.out.println("第三轮后");
// System.out.println(Arrays.toString(arr));//1,34,101,119}
}