public class SelectionSortDouble {
//SelectionSortDouble不允许产生实例
private SelectionSortDouble() {
}
public static void sort(Comparable[] arr) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
int min = left;
int max = right;
for (int i = left; i <= right; i++) {
//遍历left到right之间,寻找最小和最大的数的索引
if (arr[i].compareTo(arr[min]) < 0) min = i;
if (arr[i].compareTo(arr[max]) > 0) max = i;
}
swap(arr, right, max);
//由于这里最小值所在索引的数可能刚好和最大值做了交换,故此要修正min的值
if (min == right) min = max;
swap(arr, left, min);
right--;
left++;
}
}
private static void swap(Comparable[] arr, int i, int j) {
Comparable t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}