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("
    ");
            }
        }
    }
  • 相关阅读:
    java10 var
    java lambda,方法引用
    Java集合总结
    Oracle/Sun JDK与OpenJDK的区别和联系
    IO基本知识
    字符串反转2单词内部不进行转换
    反转String 1
    java 左移<<&>>右移&>>无符号右移
    反射
    equals方法与hashcode方法
  • 原文地址:https://www.cnblogs.com/xiejc/p/4040862.html
Copyright © 2011-2022 走看看