1,一开始指针在第一位,比较后面的数组,寻找最小位,然后跟第一位替换。
2.第二次循环指针在第2位开始,N为now,I为现在的指向,min记录位置
5<4,min记录数字4的位置
跟min作比较,4<2,min记录数字2的位置
跟min作比较,3<2,min还是2的位置,保持不变
跟min作比较,8<2,min还是数字2的位置,保持不变
循环一轮结束,min为数字2的位置,跟N指针数字5的位置替换
下一轮循环,N指针指向数字4,以此类推
第一次循环
package com.my;
/**
* 从左往右走,找到最小的替换
*/
public class SelectionSort {
public static void main(String[] args) {
int[] ints = new int[]{5,4,2,3,8};
sort(ints);
print(ints);
}
private static void sort(int[] ints) {
//N为现在的位置,I为移动的指针,min记录最小位置
int N=0,I=0,min=0;
//第一次循环,I向右走
for(int i=0;i<ints.length;i++){
//比较大小,记录min位置
if(ints[min]>ints[i]){
min=i;//记录位置
}
}
swap(ints,N,min);//替换位置
}
private static void swap(int[] ints,int a,int b){
int temp = ints[a];
ints[a] = ints[b];
ints[b] = temp;
}
private static void print(int[] ints){
for(int i:ints){
System.out.print(i);
}
}
}
24538
以上是第一次循环,现在N指针向右走,加上一层循环min每次循环从N位置开始
package com.my;
/**
* 从左往右走,找到最小的替换
*/
public class SelectionSort {
public static void main(String[] args) {
int[] ints = new int[]{5,4,2,3,8};
sort(ints);
print(ints);
}
private static void sort(int[] ints) {
//N为现在的位置,I为移动的指针,min记录最小位置
int N=0,I=0;
for(int n=N;n<ints.length;n++){
int min=n;
//第一次循环,I向右走
for(int i=n;i<ints.length;i++){
//比较大小,记录min位置
if(ints[min]>ints[i]){
min=i;//记录位置
}
}
swap(ints,n,min);//替换位置
}
}
private static void swap(int[] ints,int a,int b){
int temp = ints[a];
ints[a] = ints[b];
ints[b] = temp;
}
private static void print(int[] ints){
for(int i:ints){
System.out.print(i);
}
}
}
优化N指针,I这里也是无效的
package com.my;
/**
* 从左往右走,找到最小的替换
*/
public class SelectionSort {
public static void main(String[] args) {
int[] ints = new int[]{5,4,2,3,8};
sort(ints);
print(ints);
}
private static void sort(int[] ints) {
//N为现在的位置,min记录最小位置
for(int n=0;n<ints.length;n++){
int min=n;//min每次循环从N位置开始
//第一次循环,I向右走
for(int i=n;i<ints.length;i++){
//比较大小,记录min位置
if(ints[min]>ints[i]){
min=i;//记录位置
}
}
swap(ints,n,min);//替换位置
}
}
private static void swap(int[] ints,int a,int b){
int temp = ints[a];
ints[a] = ints[b];
ints[b] = temp;
}
private static void print(int[] ints){
for(int i:ints){
System.out.print(i);
}
}
}
23458