zoukankan      html  css  js  c++  java
  • QuickSelect

     QuickSelect : 快速选择,在线性时间内查找第k个位置的元素。

    算法目的: 数组长度为n,查找第k个元素

    复杂度:o(N)

    算法:

    1,从数组中随机选定一个元素x,大于x的分成一组,记做smaller,小于x的分成一组,记做larger

    2,如果 smaller的长度等于k-1,说明x是第k个位置的元素

    3,如果 smaller的长度大于等于k,从smaller中找到第k个元素

    4,如果smaller的长度 + 1 小于k,从larger中找第k-1 - smaller长度位置的元素

    算法的最大比较次数不超过4n

    Java 代码:

    package alg.analysis;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class QuickSelect {
    
        public static int quickSelect(List<Integer> datas, int k){
            
            assert (k>=1&&k<=datas.size());
    
            List<Integer> smallers = new ArrayList<Integer>();
            List<Integer> largers = new ArrayList<Integer>();
            int valueMark = datas.get(0);
            for (int i=1;i<datas.size(); i++){
                if(datas.get(i)>valueMark){
                    largers.add(datas.get(i));
                }
                if(datas.get(i)<=valueMark){
                    smallers.add(datas.get(i));
                }
            }
    
            if (smallers.size() >= k) {
                return quickSelect(smallers, k);
            }
            if (smallers.size() +1 < k) {
                return quickSelect(largers, k-smallers.size()-1);
            }
            return valueMark;
        }
    
        public static void main(String []args){
            List<Integer> datas = new ArrayList<Integer>();
            datas.add(3);
            datas.add(2);
            datas.add(1);
            datas.add(7);
            datas.add(6);
            datas.add(5);
            datas.add(4);
    
            int fifth = quickSelect(datas, 5);
            System.out.println(fifth);
        }
    
    }
    

      

  • 相关阅读:
    English Voice of <<Cups>>
    【线段树】奶牛排队(USACO 2007 January Gold)
    【线段树】买水果
    【线段树】卫星覆盖(NOI97)-矩阵切割
    插入排序 (Insertion Sort)
    选择排序 (Selection Sort)
    springboot整合redis
    redis入门及相关API
    mycat配置文件的详细介绍
    redis常用命令
  • 原文地址:https://www.cnblogs.com/afraidToForget/p/10890823.html
Copyright © 2011-2022 走看看