泛型快排

简介:
/**
 * 快排(除null)
 *
 * @param array
 * @param <C>
 */
public static <C extends Comparable> void sort(C[] array) {
    if (null == array) {
        return;
    }
    sort(array, 0, array.length - 1);
}

/**
 * 快排
 *
 * @param array
 * @param start
 * @param end
 * @param <C>
 */
private static <C extends Comparable> void sort(C[] array, int start, int end) {
    if (end - start < 1) {
        return;
    }
    select(array, start, end);
    C split = array[start];
    int i = start;
    int j = end;
    while (i < j) {
        // 找到比split小的数
        while (i < j && bigger(array[j], split)) {
            j--;
        }
        if (i < j) {
            array[i++] = array[j];
        }
        // 找到比split大的数
        while (i < j && smaller(array[i], split)) {
            i++;
        }
        if (i < j) {
            array[j--] = array[i];
        }
    }
    array[i] = split;
    // 排序左边
    sort(array, start, i - 1);
    // 排序右边
    sort(array, i + 1, end);
}

/**
 * 选择策略
 *
 * @param array
 * @param start
 * @param end
 * @param <C>
 */
private static <C extends Comparable> void select(C[] array, int start, int end) {
    int mid = start + (end - start) / 2;
    if (smaller(array[start], array[mid])) {
        swap(array, start, mid);
    } else if (smaller(array[start], array[end])) {
        swap(array, start, end);
    }
}

/**
 * 交换值
 *
 * @param array
 * @param a
 * @param b
 * @param <C>
 */
private static <C extends Comparable> void swap(C[] array, int a, int b) {
    C t = array[a];
    array[a] = array[b];
    array[b] = t;
}

@SuppressWarnings("unchecked")
public static <C extends Comparable> boolean bigger(C a, C b) {
    return a.compareTo(b) > 0;
}

@SuppressWarnings("unchecked")
public static <C extends Comparable> boolean smaller(C a, C b) {
    return a.compareTo(b) < 0;
}
目录
相关文章
|
7月前
|
算法
【算法专题突破】双指针 - 复写零(2)
【算法专题突破】双指针 - 复写零(2)
16 0
|
4月前
|
搜索推荐 Java 索引
快速排序的新用法
快速排序的新用法
27 0
|
4月前
|
存储 算法 搜索推荐
排序方法8大总结
排序方法8大总结
|
5月前
|
算法
insertionSoft(插入排序) 2.1-1 And 重写insertionSoft 2.1-2
insertionSoft(插入排序) 2.1-1 And 重写insertionSoft 2.1-2
15 0
|
11月前
|
算法 搜索推荐 Java
数组的四种排序方法介绍
数组的四种排序方法介绍
256 0
|
12月前
|
Java
java实现数组二分查找
java实现数组二分查找
泛型栈和队列
泛型栈和队列
88 0
|
搜索推荐 C++ 容器
(C/C++)STL函数和排序算法:快排以及归并排序
(C/C++)STL函数和排序算法:快排以及归并排序
(C/C++)STL函数和排序算法:快排以及归并排序