Java实现快速排序(泛型)

来源:互联网 发布:阿里云视频点播 编辑:程序博客网 时间:2024/06/15 00:33

算法的原理详见:《坐在马桶上看算法:快速排序》
http://developer.51cto.com/art/201403/430986.htm

package sort;import java.util.Arrays;/** * 快速排序的Java实现 * * @Author: lujin * @Created Date: 2016/8/23 9:23 * @Version 1.0.0 * @LastModify 2016/8/23 9:23 */public class QuickSort {    /**     * 原地进行快速排序     */    public static <T extends Comparable> void sort(T[] array) {        // 入参检查        if (array == null || array.length == 0) {            System.out.println("[WARNING] input array to sort is null or emtpy, do nothing as default");            return;        }        //构造标志变量        int low = 0;        int high = array.length - 1;        qsort(array, low, high);    }    /**     * 递归形式快速排序     *     * @param arr  待排序数组     * @param low  排序的数组下界     * @param high 排序的数组上界     */    public static <T extends Comparable> void qsort(T[] arr, int low, int high) {        if (low >= high) return;        //递归划分        int pivot = partition(arr, low, high);        qsort(arr, low, pivot - 1);        qsort(arr, pivot + 1, high);    }    /**     * 按照指定的上下界计算出中轴,中轴满足:左边的元素都小于它,右边的元素都大于它     *     * @param arr  待计算的数组     * @param low  参与计算的数组下界     * @param high 参与计算的数组上界     * @return 满足要求的中轴元素     */    public static <T extends Comparable> int partition(T[] arr, int low, int high) {        //设置最小值为轴        T pivot = arr[low];        int i = low, j = high;        while (i < j) {            // 找到右边第比轴小的值            while (j > i && arr[j].compareTo(pivot) >= 0) --j;            // 找到左边第比轴大的值            while (i < j && arr[i].compareTo(pivot) <= 0) ++i;            // 交互2个值            if (i < j) {                T tmp = arr[i];                arr[i] = arr[j];                arr[j] = tmp;            }        }        //最终将轴归位        arr[low] = arr[i];        arr[i] = pivot;        return i;    }}
0 0
原创粉丝点击