# 数组的排序算法

# 0. 辅助工具类

public class SortUtil {

    public static void swap(int[] array, int x, int y) {
        int temp = array[x];
        array[x] = array[y];
        array[y] = temp;
    }


    public static int[] initArray(int size) {
        int[] array = new int[size];

        for (int i = 0; i < size; i++) {
            array[i] = i + 1;
        }

        /**
         * 随机生成有 size 个元素的数组。
         * 其中无零,且无重复数值,以便于演示。
         */
        Random rand = new Random();

        /* 开始 Knuth 洗牌算法,基本流程是这样的:
         * 从最后一个数开始,往前遍历,每一次,从当前数和第 1 个数之间,随机选择一个数,与当前数字进行交换
         * 这里的随机选择就直接使用程序语言中的 Random 随机一个索引即可。
         */
        int last = array.length - 1;
        for (int i = last; i >= 0; --i) {
            // 从当0~当前索引位之间,选择一个数
            int selection = rand.nextInt(i + 1);

            // 索引位对应的数据交换
            swap(array, i, selection);
        }

        return array;
    }
}

# 1. 排序算法