zoukankan      html  css  js  c++  java
  • 求给定数据中最小的K个数

    public class MinHeap {
        /*
         * 
         * Top K个问题,求给定数据中最小的K个数
         * 
         * 最小堆解决:堆顶元素为堆中最大元素
         * 
         * 
         * 
         */
        private int MAX_DATA = 10;//最小10个数
        private int[] data;//存储数据
        private int len;//当前存储长度,考虑到元素个数可能没有10个,这个时候全部输出
        private MinHeap() {
            data = new int[MAX_DATA];
            len=0;
        }
        private MinHeap(int max) {
            this.MAX_DATA = max;
            data = new int[MAX_DATA];
            len=0;
        }
    
        public void setRoot(int root) {
            this.data[0] = root;
        }
    
        public void addData(int da) {
            if (this.len < this.MAX_DATA)
            {
                this.data[this.len] = da;
                len++;
                if(len==this.MAX_DATA)
                    this.adjust(0);
            }
            else if(da<this.getRoot())
            {
                this.setRoot(da);
                this.adjust(0);
            }
        }
        private void adjust(int index)
        {
            int left=index*2+1;
            int right=index*2+2;
        
            if(left<this.len&&right<(this.len)&&data[index]>=data[left]&&data[index]>=data[right])
                return;
            if(left<this.len&&data[index]<data[left])
            {
                data[index]^=data[left];//两个数交换
                data[left]^=data[index];
                data[index]^=data[left];
                this.adjust(left);
            }
            if(right<(this.len)&&data[index]<data[right])
            {
                data[index]^=data[right];
                data[right]^=data[index];
                data[index]^=data[right];
                this.adjust(right);
            }
        }
        private int getRoot()
        {
            return this.data[0];
        }
        public String toString()
        {
            for(int i=0;i<this.len;i++)
                System.out.print(data[i]+"/");
            return null;
        }
            
        public static void main(String args[])
        {
            MinHeap min=new MinHeap();
            for(int i=200;i>0;i--)
            {
                min.addData(i);
                min.toString();
                System.out.print("
    ");
            }
        }
    }
  • 相关阅读:
    Solr7.7安装,配置中文分词 IKAnalyzer分词
    Solr7.7安装,链接数据库并导入数据,初级导入数据
    Solr7.7安装,过浏览器可以看到Solr界面,进行可视化操作
    Solr7.7安装,JDK安装
    Jquery 全局错误处理
    各种问题
    Elmah 数据库脚本
    LINQ&EF任我行(二)--LinQ to Object
    css3 animatehue属性
    Lync二次开发关于Lync启动退出问题
  • 原文地址:https://www.cnblogs.com/xiejc/p/4040862.html
Copyright © 2011-2022 走看看