# 数组的排序算法
# 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;
}
}