选择排序是一种较为常见的排序方式,虽然其性能等各方面有些小问题,但是较为简单易于理解。
原理:
找出数组中的最小元素,然后和第一个元素交换。
在剩下的元素中找出最小元素(第二小)再和第二个元素替换;
循环此方法直至最后一个元素。
/**
* 选择排序
* @author Youda
*
*/
public class Selection {
/**
* 将src数组按照升序排序
* @param src
*/
public static void sort(Comparable[] src){
int N = src.length; //数组长度
for(int i=0;i<N;i++){
int min = i;//默认最小位置为第一个
for(int j=i+1;j<N;j++){
if(less(src[j],src[min])){
min = j;
}
}
exchange(src,i,min);
}
}
//比较x是否小于y
public static boolean less(Comparable x, Comparable y){
return x.compareTo(y)<0;
}
//交换 x,y
public static void exchange(Comparable[] src,int x,int y){
Comparable z = src[x]; src[x] = src[y]; src[y] = z;
}
public static void main(String[] args) {
//测试数据
String[] src = {"a","x","z","i","y","o","l","q","b","d","z","s","c"};
Integer[] src1 = {100,99,70,98,99,101,3,6,676,45,25,77,80,1,0,46,28,11111,56666,22,6,8,29};
sort(src); //排序
sort(src1);
for(String str:src){
System.out.print(str+",");
}
System.out.println();
for(int i=0;i<src1.length;i++){
System.out.print(src1[i]+",");
}
}
}