百度百科
https://baike.baidu.com/item/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F/9762418?fr=aladdin
分析图
思路图
第一次的代码为:我们先一次一次的排序
package com.afmobi;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arr = {0,-1,3,-5,9,};
SelectSort.selectSort(arr);
}
public static void selectSort(int[] arr) {
// 原始数组 0,-1,3,-5,9,
//第1轮 结果 -5,-1,3,0,9
int minIndex = 0;
int min = arr[0];
for (int i = 0 + 1; i < arr.length; i++) { // 先跟第一个数比
if (min > arr[i]) { // 找到更小的值 重置minIndex|min
min = arr[i];
minIndex = i;
}
}
// 循环遍历之后得到最小值才进行交换位置
if (minIndex != 0) {
arr[minIndex] = arr[0];
arr[0] = min;
}
System.out.println("第一轮后");
System.out.println(Arrays.toString(arr));
//第2轮 结果 -5,-1,3,0,9
minIndex = 1;
min = arr[1];
for (int i = 1 + 1; i < arr.length; i++) { // 先跟第一个数比
if (min > arr[i]) { // 找到更小的值 重置minIndex|min
min = arr[i];
minIndex = i;
}
}
// 循环遍历之后得到最小值才进行交换位置
if (minIndex != 1) {
arr[minIndex] = arr[1];
arr[1] = min;
}
System.out.println("第二轮后");
System.out.println(Arrays.toString(arr));
// 第3轮 结果 -5,-1,0,3,9
minIndex = 2;
min = arr[2];
for (int i = 2 + 1 ; i < arr.length; i++) { // 先跟第一个数比
if (min > arr[i]) { // 找到更小的值 重置minIndex|min
min = arr[i];
minIndex = i;
}
}
// 循环遍历之后得到最小值才进行交换位置
if (minIndex != 2) {
arr[minIndex] = arr[2];
arr[2] = min;
}
System.out.println("第三轮后");
System.out.println(Arrays.toString(arr));
// 第4轮 结果 -5,-1,0,3,9
minIndex = 3;
min = arr[3];
for (int i = 3 + 1; i < arr.length; i++) { // 先跟第一个数比
if (min > arr[i]) { // 找到更小的值 重置minIndex|min
min = arr[i];
minIndex = i;
}
}
// 循环遍历之后得到最小值才进行交换位置
if (minIndex != 3) {
arr[minIndex] = arr[3];
arr[3] = min;
}
System.out.println("第四轮后");
System.out.println(Arrays.toString(arr));
}
}
运行结果:
看到代码每一轮重复的部分了吧
于是修改代码
package com.afmobi;
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arr = {0,-1,3,-5,9,};
SelectSort.selectSort(arr);
}
public static void selectSort(int[] arr) {
// 原始数组 0,-1,3,-5,9,
//第1轮 结果 -5,-1,3,0,9
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]) { // 找到更小的值 重置minIndex|min
min = arr[j];
minIndex = j;
}
}
// 循环遍历之后得到最小值才进行交换位置
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
System.out.printf("第%d轮后", i +1);
System.out.println(Arrays.toString(arr));
}
}
测试结果:
当我们对一些排序算法没思路时,可以把问题缩小化,一步一步来,你就会发现规律!从而实现最后的代码!