外循环:依次遍历每个元素,下标作为最小值索引,对应元素作为最小值。
内循环:依次遍历外层下标以后的每一个元素,进行:
运行时间与输入无关。都为\(\frac{1}{2}N^2\)
数据移动最小,与数组大小 N 成正比。
选择的含义体现在每次内循环都选出了最小的元素。
public class Selection{
//对外提供排序方法
public static void sort(Comparable[] a){
for(int i=0;i<a.length;i++){
//最小值对应的索引
int min=i;
for(int j=i+1;j<a.length;j++){
if(less(a[j],a[min])){
min=j;
}
}
exch(a,i,min);
}
}
//判断前者是否小于后者
private static boolean less(Comparable a,Comparable b){
return a.compareTo(b)<0;
}
//两者交换
private static void exch(Comparable[] a,int i,int j){
Comparable t=a[i];
a[i]=a[j];
a[j]=t;
}
//判断是否有序(自然序)
private static boolean issort(Comparable[] a){
for(int i=0;i<a.length-1;i++){
if(less(a[i+1],a[i])){
return false;
}
}
return true;
}
//对外提供展示方法
public static void show(Comparable[] a){
for(Comparable c:a){
System.out.println(c);
}
}
public static void main(String[] args) {
Integer[] a={8,7,6,8,2,4,5,2,1};
sort(a);
System.out.println(issort(a));
show(a);
}
}
原文:https://www.cnblogs.com/juzhuxiaozhu/p/12776139.html