首先,找到数组中最小的那个元素,其次,将它和数据中的第一个元素交换位置(如果第一个元素就是最小元素那么他就和自己交换)。其次,在剩下的元素中找到最小的元素,将它与数组中的第二个元素交换位置。如此往复,直到将整个数据进行排序。
代码实现import com.sun.jdi.PathSearchingVirtualMachine;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class SelectionSort {
public static void select(int[] arr) {
// 需要经过N-1轮比较
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
swap(arr, i, minIndex);
}
}
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void main(String[] args) {
int[] arr = {5, 8, 6, 3, 9, 2, 1, 7};
select(arr);
System.out.println(Arrays.toString(arr));
}
}
使用带泛型的约束
import java.util.Arrays;
public class SelectionSortGeneric {
public static > void sort(E[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j].compareTo(arr[minIndex]) < 0) {
minIndex = j;
}
}
swap(arr, i, minIndex);
}
}
public static void swap(E[] arr, int i, int j) {
E tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
}
public static void main(String[] args) {
Integer[] arr = {5, 8, 6, 3, 9, 2, 1, 7};
sort(arr);
System.out.println(Arrays.toString(arr));
}
}



