🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
```java /** * 快速排序:在排序前先洗牌(可以参考随机化算法-舍伍德算法) * <pre> * 快速排序的算法改进: * 【切换到插入排序】【三取样切分】【熵最优的排序,三向切分】 * <pre> * 三取样切分 * (1)使用子数组的一小部分元素的中位数来切分数组,这样能切分得更好,但是需要计算中位数 * (2)人们发现将大小设为3并用大小居中的元素切分得效果最好 * </pre> * </pre> * * * @param <T> * @param a */ public static <T extends Comparable> void quickSort(T[] a) { Shuffle.shuffle(a); quickSort(a, 0, a.length - 1); // quickSortInsert(a, 0, a.length - 1); // quickSort3way(a, 0, a.length - 1); } ``` > 以下是该洗牌算法的实现 ```java package util; import java.util.Arrays; /** * 设计一种公平的洗牌算法(算法导论) * * @author zhaoxuyang */ public class Shuffle { public static void main(String[] args) { Integer[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; shuffle(a); System.out.println(Arrays.toString(a)); } public static <T extends Comparable> void shuffle(T[] arr) { for (int i = arr.length - 1; i >= 0; i--) { swap(arr, i, rand(0, i)); } } private static int rand(int begin, int end) { return (int) (begin + Math.random() * (end - begin + 1)); } private static <T extends Comparable> void swap(T[] arr, int i, int j) { T t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } ```