泛型快排

简介:
/**
 * 快排(除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;
}
目录
相关文章
|
2月前
|
C语言
【c语言】qsort函数及泛型冒泡排序的模拟实现
本文介绍了C语言中的`qsort`函数及其背后的回调函数概念。`qsort`函数用于对任意类型的数据进行排序,其核心在于通过函数指针调用用户自定义的比较函数。文章还详细讲解了如何实现一个泛型冒泡排序,包括比较函数、交换函数和排序函数的编写,并展示了完整的代码示例。最后,通过实际运行验证了排序的正确性,展示了泛型编程的优势。
36 0
|
5月前
|
算法
快排(代码的实现)
快排(代码的实现)
|
6月前
|
存储 算法 搜索推荐
【数据结构】归并排序的非递归写法和计数排序
【数据结构】归并排序的非递归写法和计数排序
|
7月前
|
算法 搜索推荐 C语言
C语言数据结构之排序整合与比较(冒泡,选择,插入,希尔,堆排序,快排及改良,归并排序,计数排序)
C语言数据结构之排序整合与比较(冒泡,选择,插入,希尔,堆排序,快排及改良,归并排序,计数排序)
|
7月前
|
存储 算法 搜索推荐
数据结构排序——详细讲解归并排序(c语言实现递归及非递归)
数据结构排序——详细讲解归并排序(c语言实现递归及非递归)
84 0
|
算法 C语言 C++
追梦之旅【数据结构篇】——基于C语言实现快排和归并排序代码
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,手把手带领大家追梦之旅【数据结构篇】——基于C语言实现快排和归并排序代码~ 都是精华内容,可不要错过哟!!!😍😍😍
156 0
|
算法 搜索推荐 C语言
C语言实现快速排序(hoare法、挖坑法、前后指针法与非递归实现)
C语言实现快速排序(hoare法、挖坑法、前后指针法与非递归实现)
260 0
|
搜索推荐 C语言
c语言-数组排序算法-冒泡法排序
冒泡法顺序指的是在排序时,从前往后扫描待排序记录,每次比较数组中相邻的两个数组元素的值,将较小的数(按从小到大排列)排在较大的数前面。
c语言-数组排序算法-冒泡法排序
泛型栈和队列
泛型栈和队列
131 0