美文网首页
【算法】快排及其partition函数(Java)

【算法】快排及其partition函数(Java)

作者: 尼古拉斯小韭菜 | 来源:发表于2021-08-19 14:26 被阅读0次

快排简单来说就是选取一个基准数,然后以基准数为目标将比它小的数都移到它的左边,比它大的数都移到它的右边,这就是快排的partition,然后基于递归的思想达到完全排序的目的,然而快排的partition思想可以应用到各种面试题的巧妙解法中,达到事半功倍的效果,比如找到数组中第K大的数,用partition将时间复杂度降到O(n).具体的应用我们后续再谈,本文只给出基于partition函数的快排的Java写法。

partition函数

public static int partition(int[] arr, int start, int end) {
        int point = arr[end];
        int i = start;
        int j = end;
        while (i < j) {
            while(i < j && arr[i] <= point) ++i;
            while(i < j && arr[j] >= point) --j;
            if(i < j){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        int temp = arr[i];
        arr[i] = arr[end];
        arr[end] = temp;
        return i;
    }

基于partition的快排

public static void quickSort(int[] arr, int start, int end) {
        if (start < end) {
            int p = partition(arr, start, end);
            quickSort(arr, start, p-1);
            quickSort(arr, p+1, end);
        }
    }

测试

public static void main(String[] args) {
        int[] arr= new int[]{1,4,6,5,8,23,5};
        quickSort(arr, 0, arr.length - 1);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

链接

数组中出现字数超过一半的数字

相关文章

  • 【算法】快排及其partition函数(Java)

    快排简单来说就是选取一个基准数,然后以基准数为目标将比它小的数都移到它的左边,比它大的数都移到它的右边,这就是快排...

  • Partition 快排核心函数

    快速排序介绍 快速排序是目前在实践中非常高效的一种排序算法,它不是稳定的排序算法,平均时间复杂度为O(nlogn)...

  • 快排的partition算法解题

    最小的k个数,输入n个整数,找出其中最小的k个数可以建立大小为K的小顶堆。也可以运用partition函数进行求解...

  • 读书笔记17.06.07

    partition函数除了在快排中的其他作用:实现在长度为n的数组中查找第k大的数字 不要死板的认为排序算法时间复...

  • 算法

    查找:二分查找 排序 快排基于快排思想解决的问题partition,第k大的数字 归并 几种排序算法的时间复杂度,...

  • Java算法——快排算法

  • partition() 与快排

    partition() 方法 快排 应用:所有有排序分组需求的题目 39,40,45

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 数组排序问题(二)

    目录 荷兰国旗问题 随机快排 堆排序 排序算法的稳定性及其汇总 工程中的综合排序算法 比较器的使用 桶排序、计数排...

  • 第k大元素(经典题目)

    1、利用快排,归并排序等,时间复杂度O(nlogn) 2、利用快排的‘标兵’partition(int[] a, ...

网友评论

      本文标题:【算法】快排及其partition函数(Java)

      本文链接:https://www.haomeiwen.com/subject/ulzobltx.html