package com.prince.algorithm;
/**
* 选择排序算法
* 首先找到数组中最小的元素,其次将它和数组的第一个元素交换位置
* (如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下
* 的元素中找到最小的元素,将它与数组的第二个元素交换位置,重复
* @author Administrator
*
*/
public class SelectSort {
public static void sort(Comparable[] a) {
//将a[]按升序排列
int N = a.length;
for(int i=0;i<N;i++) {
//将a[i]和a[i+1..N]中最小的元素交换
int min = i; //最小元素的索引
for(int j=i+1;j<N;j++)
if(less(a[j],a[min])) min=j;
exch(a,i,min);
}
}
private static boolean less(Comparable v,Comparable w) {
return v.compareTo(w)<0;
}
private static void exch(Comparable[] a, int i, int j) {
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
private static void show(Comparable[] a) {
//在单行中打印数组
for(Comparable temp:a) {
System.out.println(temp);
}
}
public static boolean isSorted(Comparable[] a){
for(int i=1;i<a.length;i++)
if(less(a[i],a[i-1])) return false;
return true;
}
public static void main(String[] args) {
String[] a = {"aa","ab","dd","ad","abc"};
sort(a);
assert isSorted(a);
show(a);
}
}