栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

快速选择算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

快速选择算法

文章目录

1.二叉堆2.快速选择算法

2.1回顾快速排序算法2.2快速选择算法 总结

1.二叉堆

思路:将节点一个一个的插入二叉堆(优先队列),当堆中元素多于k个时,删除堆顶元素。每个节点都过一遍之后,再取堆顶元素。

public int findKthLargest(int[] nums, int k) {
        PriorityQueue que = new PriorityQueue<>();
        for (int num : nums) {
            que.offer(num);
            if (que.size()>k){
                que.poll();
            }
        }
        return que.peek();
    }
2.快速选择算法 2.1回顾快速排序算法
public void sort(int[] nums) {
        quickSort(nums, 0, nums.length - 1);
    }

    public void quickSort(int[] nums, int lo, int hi){
        if (hi<=lo) return;
        int partition = partition(nums, lo, hi);

        quickSort(nums,lo,partition-1);
        quickSort(nums,partition+1,hi);
    }

    public int partition(int[] nums, int lo, int hi){
        int pivot = nums[lo];
        int i =lo;
        int j = hi+1;
        while (true){
            while (nums[++i]pivot){
                if (j==lo) break;
            }

            if (i>=j) break;

            swap(nums,i,j);
        }
        swap(nums,lo,j);
        return j;
    }

    public void swap(int[] nums,int i,int j){
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
2.2快速选择算法
public int findKthLargest(int[] nums, int k) {
        k = nums.length - k;
        int lo = 0, hi = nums.length - 1;
        while (lo<=hi){
            int partition = partition(nums, lo, hi);
            if (partitionk){
                hi = partition - 1;
            }else {
                return nums[partition];
            }
        }
        return -1;
    }
总结

遇到题目优先选择二叉堆,快速排序算法熟记

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/771303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号