实现代码:
/**
* 比较对象
* @param v
* @param w
* @return v小于w 返回ture,否则返回false
*/
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
/**
* 按索引,交换数组中位置
*
* @param a 数组
* @param i 索引
* @param j 索引
*/
private static void exch(Comparable[] a, int i, int j) {
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
/**
* 测试数组是否有序
* @param a
* @return
*/
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;
}
/**
* 选择排序 遍历全部,与所有的数据进行比较
*
* @param a
*/
public static void SelectSort(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);
}
}
测试代码:
//生成随机字符串
int size = 40000;
String[] s = new String[size];
for (int i = 0; i < size; i++) {
s[i] = RandomStringUtils.randomAlphanumeric(10);
}
System.out.println("isSorted " + Smath.isSorted(s));
long startTime = System.currentTimeMillis();
//采用"选择排序"算法对数组进行排序
Smath.SelectSort(s);
long doneTime = System.currentTimeMillis();
System.out.println("isSorted " + Smath.isSorted(s) + "\nestimate " + (doneTime - startTime) + " milliseconds");
测试结果:
isSorted false
isSorted true
estimate 3418 milliseconds