选择排序,找到数组中最小的元素,让它和第一个元素交换;找到第二小的元素,让它和第二个元素交换,如此往复,直到完全排序
/**
* 选择排序
* @author GF
* @since 2023/8/5
*/
public class ChooseSort {
/**
* O(n^2)
*/
public static <T extends Comparable<T>> void sort(T[] g, boolean asc) {
int len = g.length;
for (int i = 0; i < len - 1; i++) {
if (asc) {
int min = i;
//找到i后面小于位置i元素的最小元素
for (int j = i + 1; j < len; j++) {
if (g[min].compareTo(g[j]) > 0) {
min = j;
}
}
swap(g, i, min);
} else {
int max = i;
//找到i后面大于位置i的最大元素
for (int j = i + 1; j < len; j++) {
if (g[max].compareTo(g[j]) < 0) {
max = j;
}
}
swap(g, i, max);
}
}
}
private static <T extends Comparable<T>> void swap(T[] g, int m, int n) {
T tmp = g[m];
g[m] = g[n];
g[n] = tmp;
}
public static void main(String[] args) {
Integer[] nums = {1,3,5,7,9,2,4,6,8,0};
// sort(nums, true);
sort(nums, false);
Arrays.stream(nums).forEach(System.out::println);
}
}