选择排序思想
假设有一个数组,int[] arr = {2, 7, -1, 10, 19};
1、 先假如数组第一个元素2为最小值,依次与剩下的元素进行比较,如果发现有元素比这个值更小就刷新最小值,第一轮结束后会找到本轮的最小值,然后让这个最小值与元素2进行交换;
2、 第一个元素最小值确定之后,再假设第二个元素7为最小值,依次与-1,10,19如果中间发现有比7小的就刷新最小值,直到遍历完这个数组,让本轮最小值的元素与元素7进行交换;
3、 从第三个元素开始,发现依次找最小值,比较…第四第五个元素同上;
4、 依次到倒数第二个元素确定之后结束;
注意事项:如果发现最小值就是自己就不要进行交换操作
代码思想
int[] arr = {
2, 7, -1, 10, 19};
//第1轮
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
}
}
if (minIndex != 0) {
//最小值如果是自己的话不进行交换
arr[minIndex] = arr[0];
arr[0] = min;
}
System.out.println(Arrays.toString(arr));
//第2轮
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
}
}
if (minIndex != 1) {
//最小值如果是自己的话不进行交换
arr[minIndex] = arr[1];
arr[1] = min;
}
System.out.println(Arrays.toString(arr));
//第3轮
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
}
}
if (minIndex != 2) {
//最小值如果是自己的话不进行交换
arr[minIndex] = arr[2];
arr[2] = min;
}
System.out.println(Arrays.toString(arr));
//第4轮
minIndex = 3;
min = arr[3];
for (int j = 3 + 1; j < arr.length; j++) {
if (min > arr[j]) {
// 说明假定的最小值,并不是最小
min = arr[j]; // 重置min
minIndex = j; // 重置minIndex
}
}
if (minIndex != 3) {
//最小值如果是自己的话不进行交换
arr[minIndex] = arr[3];
arr[3] = min;
}
System.out.println(Arrays.toString(arr));
最终版本
int[] arr = {
2, 7, -1, 10, 19};
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
}
}
if (minIndex != i) {
//最小值如果是自己的话不进行交换
arr[minIndex] = arr[i];
arr[i] = min;
}
System.out.println(Arrays.toString(arr));
}
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: