1、未改进的简单选择排序
public static void main(String[] args) {
int[] s={9,1,5,8,3,7,4,6,2};
SimpleSelectSort(s);
}
private static void SimpleSelectSort(int[] s) {
for(int i=0;i<s.length;i++){
int min=i;
for(int j=i+1;j<s.length;j++){
if(s[min]>s[j])
min=j;
}
if(min!=i){
int a=s[min];
s[min]=s[i];
s[i]=a;
}
for(int k=0;k<s.length;k++){
System.out.print(s[k]+" ");
}
System.out.println();
}
}
}
排序的结果如下:
1 9 5 8 3 7 4 6 2
1 2 5 8 3 7 4 6 9
1 2 3 8 5 7 4 6 9
1 2 3 4 5 7 8 6 9
1 2 3 4 5 7 8 6 9
1 2 3 4 5 6 8 7 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
2、改进之后的简单选择排序
private static void SelectSort(int[] s) {
for(int i=0;i<s.length;i++){
boolean flag=false;//此处设置了一个判别标志
int min=i;
for(int j=i+1;j<s.length;j++){
if(s[min]>s[j]){
min=j;
flag=true;//如果当前值不是最小值,flag变为true,否则说明当前值就是最小值,则直接从下一个起点开始进行判别;
}
}
if(!flag)
continue;
if(min!=i){
int a = s[min];
s[min]=s[i];
s[i]=a;
}
for(int k=0;k<s.length;k++){
System.out.print(s[k]+" ");
}
System.out.println();
}
}
排序的结果如下:
1 9 5 8 3 7 4 6 2
1 2 5 8 3 7 4 6 9
1 2 3 8 5 7 4 6 9
1 2 3 4 5 7 8 6 9
1 2 3 4 5 6 8 7 9
1 2 3 4 5 6 7 8 9
两种排序结果比较可以发现,改进版的简单选择排序更优,特别是针对某一个中间点出现局部排序的情况,那么改进版的简单选择排序效果会更好。