美文网首页
求一亿个数字里面最小的10个数字

求一亿个数字里面最小的10个数字

作者: Matthew_Zhang | 来源:发表于2018-08-28 10:06 被阅读0次

package com.yuzhiyun;import java.util.Arrays;/**

* 求一亿个数里面最小的10个数

* 首先建立节点个数为10的最大堆,然后考虑每一个新的值,让他和堆顶比较,比堆顶大的元素直接抛弃,如果比堆顶小的数字,让他替换堆顶,然后调整堆。

*/public classMaxTenNumber{    public static void main(String[] args) {

        /**第一个元素0不参与,只是用于占位置,这样的话,只要array[k]>array[2k] && array[k]>array[2k+1]那就是最大堆了,

        * 此外,这里暂时用20个数代替1亿个

        */        int[] array={0,1,2,3,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,6,5};

        //建立建立节点个数为10的最大堆        for(int i=10/2;i>=1;i--){

            adjustHeap(array, i, 10);

        }

        //System.out.println(Arrays.toString(array));        for(int i=11;i

            //如果这个元素小于堆顶,和堆顶交换,然后重新调整堆            if(array[i]

                swap(array, i, 1);

                adjustHeap(array, 1, 10);

            }

        }

        System.out.println(Arrays.toString(array));

        System.out.println("最小的10个数字为:");

        for(int i=1;i<=10;i++){

            System.out.print(array[i]+" ");

        }

    }

    /**    * 交换    * @paramarray    * @parami    * @paramj    */    private static void swap(int[] array, int i, int j) {

        int tem=array[i];

        array[i]=array[j];

        array[j]=tem;

    }

    /**    * 在以array[head]为根的左右子树是最大堆的前提下把以array[head]为根的树调整为最大堆    * @paramarray    * @paramhead    * @paramtail    */    static void adjustHeap(int[] array,int head,int tail){

        int root=array[head];

        int i=2*head;

        while(i<=tail){

            int max=array[i];

            if(i+1<=tail)

                if(array[i+1]>array[i]){

                    max=array[i+1];

                    i++;

                }

            if(root>max)

                //别手抖写成了return;                break;

            else{

                array[i/2]=array[i];       

            }

            i*=2;

        }

        array[i/2]=root;

    }

}

相关文章

  • 求一亿个数字里面最小的10个数字

    package com.yuzhiyun;import java.util.Arrays;/** * 求一亿个数里...

  • function

    求任意数组的最大值 求任意数组的最小值 //求任意范围数字和 求任意数字的总和 // type 检测参数数据类型...

  • JS求一个数的十倍的最小值

    求一个数的十倍的最小值 求一个数的第一位数字加1的最小值

  • 【楷楷讲故事14】数字王国

    从前,有一个数字王国,里面都是数字。 有一个叫1的数字,他觉得自己是最小的数,便哭了起来。 2听见了,说:“你怎么...

  • 如果我有一亿美金

    《如果我有一亿美金》文/雪心 一亿美金是个很大的数字!如果我有一亿美金和我没有一亿美金的区别是什么?如果我现...

  • 选择排序

    原理假如升序排列。第一轮:从数组中选出最小的数字,放在第1个位置。第二轮:从第2个数字开始,寻找最小的数字,放在第...

  • excel如何查出一组数据里大于某个值的最小值

    标题有些绕,举个栗子一目了然。 比如有5个数字:(1,2,3,21,22),需要求出这5个数字里面大于10的最小值...

  • 45-把数组排成最小的数

    输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 思路:1.先求所有的...

  • 无聊:输入一个数字,返回该数字组合而成的最小值

    JAVA,输入一个数字,返回该数字组合而成的最小值想法:将数字拆分成单个数字并存储至集合中,循环比较数字大小然后存...

  • Python | set集合的pop() 方法

    下面是打印的结果1(随机删除一个非数字的元素): 下面是结果2(删除的是数字, 但删的是最小的数字, 其余数字元素...

网友评论

      本文标题:求一亿个数字里面最小的10个数字

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