ChooseSort 选择排序

85 阅读1分钟

选择排序,找到数组中最小的元素,让它和第一个元素交换;找到第二小的元素,让它和第二个元素交换,如此往复,直到完全排序

/**
 * 选择排序
 * @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);
    }

}