觉得蛮有参考意义的,所以就贴上来了,方便以后自己看。
package com.my.util;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;
public class Top100 {
public static void main(String[] args) {
find();
}
public static void find( ) {//
int number = 100000000;// 一亿个数
int maxnum = 1000000000;// 随机数最大值
int i = 0;
int topnum = 100;// 取最大的多少个
Date startTime = new Date();
Random random = new Random();
int[] top = new int[topnum];
for (i = 0; i < topnum; i++) {
top[i] = Math.abs(random.nextInt(maxnum));//设置为随机数
// top[i] = getNum(i);
}
buildHeap(top, 0, top.length);// 构建最小堆, top[0]为最小元素
for (i = topnum; i < number; i++) {
int currentNumber2 = Math.abs(random.nextInt(maxnum));//设置为随机数
// int currentNumber2 = getNum(i);
// 大于 top[0]则交换currentNumber2 重构最小堆
if (top[0] < currentNumber2) {
top[0] = currentNumber2;
shift(top, 0, top.length, 0); // 构建最小堆 top[0]为最小元素
}
}
System.out.println(Arrays.toString(top));
sort(top);
System.out.println(Arrays.toString(top));
Date endTime = new Date();
System.out.println("用了"+(endTime.getTime() - startTime.getTime())+"毫秒");
}
public static int getNum(int i){
return i;
}
//构造排序数组
public static void buildHeap(int[] array, int from, int len) {
int pos = (len - 1) / 2;
for (int i = pos; i >= 0; i--) {
shift(array, from, len, i);
}
}
/**
* @param array top数组
* @param from 开始
* @param len 数组长度
* @param pos 当前节点index
* */
public static void shift(int[] array, int from, int len, int pos) {
// 保存该节点的值
int tmp = array[from + pos];
int index = pos * 2 + 1;// 得到当前pos节点的左节点
while (index < len)// 存在左节点
{
if (index + 1 < len
&& array[from + index] > array[from + index + 1])// 如果存在右节点
{
// 如果右边节点比左边节点小,就和右边的比较
index += 1;
}
if (tmp > array[from + index]) {
array[from + pos] = array[from + index];
pos = index;
index = pos * 2 + 1;
} else {
break;
}
}
// 最终全部置换完毕后 ,把临时变量赋给最后的节点
array[from + pos] = tmp;
}
public static void sort(int[] array){
for(int i = 0; i < array.length - 1; i++){
//当前值当作最小值
int min = array[i];
for(int j = i+1; j < array.length; j++){
if(min>array[j]){
//如果后面有比min值还小的就交换
min = array[j];
array[j] = array[i];
array[i] = min;
}
}
}
}
}
分享到:
相关推荐
在这个场景中,我们需要从一亿个数字中快速找出前100个最小的数字。这通常涉及到排序算法和数据结构的运用,以达到在短时间内找到目标结果。以下是实现这个任务的一些关键知识点: 1. **优先队列(Priority Queue)...
根据所提供的《2020年中国便利店Top100精品报告》内容,我们可以得知中国便利店市场的发展情况,其中提及到的公司和品牌大多是行业内的佼佼者,门店数量多,市场占有率高。 品牌排名: 报告中列举了中国便利店行业...
- **定义**: `ROW_NUMBER()` 是一个窗口函数,用于给每一行分配一个唯一的数字。 - **使用场景**: 当需要对查询结果进行排序并获取特定数量的行时非常有用。 - **语法**: `ROW_NUMBER() OVER (ORDER BY <排序列> ...
为了简化分析,可以将数字电位器R2分为两部分:R2top和R2bottom,如**图2**所示。通过这种方式,我们可以更容易地计算出电路的传输函数VOUT/VIN,该函数在不同的电位器编码下有不同的表现,如**图3**所示。 ##### ...
通过上述方法,我们可以利用VB中垂直滚动条的逆向使用,结合取绝对值函数,成功地创建了一个递增数字框,实现了特定场景下的数值输入控制需求。这种方法不仅展示了编程的灵活性,也提供了在面对非标准需求时的解决...
例如,给定一个数组a = [1, 4, 3, 5, 2],通过调用np.argsort(a),我们可以得到一个数组b = [0, 4, 2, 1, 3],这个数组b中的每个数字代表着原数组a中的元素在排序后的位置。因此,a[0]就是最小的元素,a[3]是最小的...
Row_Number函数是SQL Server中用于为结果集中的每一行分配一个唯一的数字,可以通过PARTITION BY子句按特定分组进行重置计数。在上述例子中,我们先为每个城市的每个产品按添加时间降序分配行号,然后筛选出行号...
VHDL(VHSIC Hardware Description Language)是一种用于硬件描述的语言,它被广泛应用于数字电子系统的设计,包括FPGA(Field-Programmable Gate Array)和ASIC(Application-Specific Integrated Circuit)等。...
在这个主题中,我们将深入探讨一种采用TOP100Y芯片的双路输出开关电源设计。TOP100Y是一款集成度高的开关电源控制器,适用于多种电源应用,尤其是对于需要双路独立输出的场合。 首先,我们来看一下TOP100Y的主要...
标题中的"top.rar_music_vhdl"表明这是一个与音乐和VHDL(Very High-Speed Integrated Circuit Hardware Description Language)相关的压缩文件。VHDL是一种用于电子设计自动化领域的硬件描述语言,它允许工程师用一...
数据来源 基于上市公司数据整理计算 时间跨度 2010-2020年 数据范围 中国沪深 A 股上市公司 数据指标 类型 变量 符号 变量定义 ...华证ESG季度评级赋值1-9分,取平均 ...数字化转型程度 ...第一大
1. **初始化计数器:** 构建一个计数器数组`count`,用来统计数组中各个数字出现的次数。 2. **重新排列:** 根据`count`数组中的值,将数字按照要求重新排列。 **代码示例:** ```cpp std::vector<int> specialSort...
因此,一个城市能否成为创业者的首选之地,很大程度上取决于它是否能提供一个适宜的创业环境。 接下来,报告通过2019年的数据,列出全球创业者城市TOP50的榜单。这个排名基于一个重要指标——融资规模超过1000万...
在编程领域,问题402“移掉K位数字”是一个经典的字符串处理问题,主要涉及字符串操作、栈数据结构的应用以及条件判断。这个问题的目标是从一个给定的整数字符串`num`中移除`k`个最小的数字,使得剩下的数字序列尽...
Rossmann销售预测(Top3%):Rossmann在7个欧洲国家经营着3000药店。结果,罗斯曼门店经理的任务是提前6周预测他们的日收益,商店的销售受到许多因素的影响,包括促销,竞争,学校和国家假日,重置和地域性,由于...
通过这种方式,我们无需使用复杂的子查询、临时表或自连接,就能轻松地实现分组取TOP数据的操作。这极大地提高了查询效率,简化了SQL语句,也使得处理大数据集变得更加高效和便捷。 总之,`row_number()` 和 `...
在现代数字电视机顶盒(Digital Set-Top Box, STB)中,存储器电路扮演着至关重要的角色,它是系统运行、解码高清视频、处理用户交互以及提供多元化服务的基础。这份文档详细阐述了以下几个关键知识点: 1. 存储器...