选择排序思想
假设有一个数组,int[] arr = {2, 7, -1, 10, 19};
- 先假如数组第一个元素2为最小值,依次与剩下的元素进行比较,如果发现有元素比这个值更小就刷新最小值,第一轮结束后会找到本轮的最小值,然后让这个最小值与元素2进行交换。
- 第一个元素最小值确定之后,再假设第二个元素7为最小值,依次与-1,10,19如果中间发现有比7小的就刷新最小值,直到遍历完这个数组,让本轮最小值的元素与元素7进行交换
- 从第三个元素开始,发现依次找最小值,比较…第四第五个元素同上
- 依次到倒数第二个元素确定之后结束
注意事项:如果发现最小值就是自己就不要进行交换操作
代码思想
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));
}