微软笔试题 给一个包含10^7个整数的大文件排序

uni-app 和 Flutter 打包上架 iOS 频繁触发 4.3 (a):原因拆解与合规处理路径 跨端方案让 iOS 上架的门槛降低了,但也带来一个明显的副作用 ——4.3 (a) 的命中率显著高于原生项目。很多开发者不理解:业务代码明明是自己写的,为什么还会被判为重复应用。这篇专门讲跨端场景,把原因和可走的路径讲清楚。 阅读详情

         这个题目有一个前提条件,大文件的中的数据有有一个特点,那就是不存在重复的数据。就算是重复的数据,也只让你求出去除重复之后的那些数据的排序结果。

         如果题目变成了这样,我们就可以考虑创建一个大的数组。数组的下表表示一个整数,数组的内容在我遍历文件的时候再赋值。如果数组下标代表的那个整数存在,我们就把数组的这个元素赋值为1,否则赋值为0.这样我们就可以再次遍历数组,把元素的值为1的那些下标输出到另一个文件,这样另一个文件中就存放了排好序的数据了。

        上面的那个数组,其实我们可以用vector<bool>,或者bitset<n>;来实现,这就是所谓的位图算法,实现如下:

//对10^7个整数的文件进行排序,整数无重复,将排序的结果写到sorted_data.txt文件中。
//用位图的方法。
void sort_big_file_with_single_data()
{
	timer t;
	//生成一个大数集合,随机排列
	const int n=5000000;
	vector<int> a;
	for (int i=0;i<n;i++)
		a.push_back(i);

	variate_generator<mt19937, uniform_int<> > myrandom (mt19937(), uniform_int<>(0,n-1));
	for (int i=0; i<n; ++i)
		swap(a[myrandom()],a[myrandom()]);

	//写数据到文件
	ofstream fout("data.txt",ios::binary);
	if (!fout)
	{
		cout<<"can not open file to write"<<endl;
	}
	for (int i=0;i<n;i++)
	{
		fout.write(reinterpret_cast<const char*>(&a[i]),sizeof(int));
	}
	fout.close();




	//从文件中读取前100个数据并显示
	ifstream fin;
	fin.open("data.txt",ios::binary);
	for (int i=0,num=0;i<100;i++)
	{
		fin.read(reinterpret_cast<char*>(&num),sizeof(int));
		if (fin.eof())
		{
			break;
		}
		cout<<num<<" ";
	}
	fin.close();


	//对文件排序
	bitset<n> bit;
	bit.reset();
	//ifstream fin;
	fin.open("data.txt",ios::binary);
	int i=0;
	while (true)
	{
		fin.read(reinterpret_cast<char*>(&i),sizeof(int));
		if (fin.eof())
		{
			break;
		}
		bit[i]=true;
	}
	fin.close();
	//将排序的文件输出到sorted_data.txt
	//ofstream fout;
	fout.open("sorted_data.txt",ios::binary);
	for (int i=0;i<n;i++)
	{
		if (bit[i]==true)
		{
			fout.write(reinterpret_cast<const char*>(&i),sizeof(int));
		}
	}
	fout.close();
	cout<<"sort data "<<t.elapsed()<<" seconds needed"<<endl;


	//读取已经排序的文件并显示前100个数据
	fin.open("sorted_data.txt",ios::binary);
	for (int i=0,num=0;i<100;i++)
	{
		fin.read(reinterpret_cast<char*>(&num),sizeof(int));
		if (fin.eof())
		{
			break;
		}
		cout<<num<<" ";
	}
	fin.close();
}


上面对5百万个整数的文件进行排序,将结果输出到另外一个文件中,并显示输出文件的一部分作为测试结果。

 

这里的计时器用到了boost库中的timer,如果没有,下载boost的文件,解压后将boost文件夹放到VC++ IDE的include文件中即可

堆排序的应用:从1亿条数据中从大到小取前10000条 NULL 博文链接:https://128kj.iteye.com/blog/1682613 立即下载

相关推荐

CoaXPress协议入门(1)---- CXP测试套件

CoaXPress (简称CXP)是指一种采用同轴线缆进行互联的相机数据传输标准,主要用于替代之前的Camera Link协议,常见于科学相机、工业相机、医学图像、航空防务等场景。CXP是一个非对称的高速点对点串行传输协议,主要用于传输视频和静态图像,线缆多使用单条或多条同轴电缆。CXP易于集成,可以获得灵活可靠的性能,通过使用标准的同轴线缆,比如RG59 和 RG6规格(推荐使用RG6),并且图像、控制通讯、触发、电源都可以使用同一条线缆。

素手挽剑 9515

文件中有一组整数,要求排序后输出到另一个文件中

 这个主要复习一下文件输入输出流~~ //文件中有一组整数,要求排序后输出到另一个文件中 #include &lt;iostream&gt; #include &lt;fstream&gt; //文件输入输出流 #include &lt;vector&gt; using namespace std; int main() { ifstream InFile("i...

weixin_33836223的博客 236

使用ACOLITE对OLCI影像进行大气校正+批处理

使用ACOLITE对OLCI影像进行大气校正+批处理

mrzhy1的博客 7361

算法的力量--之bit位运算在排序与搜索中的应用

楔子:问题:假设一个文件中有9亿条不重复的9位整数,现在要求对这个文件进行排序。一般解题思路:1、将数据导入到内存中2、将数据进行排序 (比如插入排序、快速排序)3、将排序好的数据存入文件难题:一个整数为4个字节即使使用数组也需要900,000,000 * 4byte = 3.4G内存对于32位系统,访问2G以上的内存非常困难,而且一般设备也没有这么多的物理内存将数据完全导入到内存中的做法

快乐的程序员 2664

使用fairseq从头开始训练一个中英神经机器翻译模型

前言 由于毕设是做神经机器翻译相关,所以先尝试一下神经机器翻译的整个流程是非常有必要的。故将在news-commentary-v15语料上训练有监督中英NMT模型的整个流程,包括工具和数据的准备、数据的预处理、训练及解码等过程,以及过程中遇到的问题和解决方案记录在此,以供后期回顾,也希望能够给予别人一些帮助。附本人博客 1 相关工具及目录结构 1.1 相关工具 除jieba是使用pip install安装外,其他几个工具都是建议直接克隆库到自己的用户目录中,方便使用其脚本(moses/subword-nmt

qq_42734797的博客 2万+

双重机器学习 stata教程 手把手教学

双重机器学习(DDML)的stata教程

weixin_59030591的博客 1万+

2015百度面试题--对10亿个32位整数去重和排序

对10亿个32位整数去重和排序

yang090510118的专栏 7982

智能挂锁软件需求规格说明书(SRS)

智能挂锁系统SmartPadlockV1.0是一款融合蓝牙通信、指纹识别和远程控制技术的便携式安防设备。系统由设备端、移动App和云平台三部分组成,支持蓝牙配对(10米内)、指纹识别、OTP一次性密码等多种开锁方式,响应时间<1.5秒。产品采用SM2/SM4加密技术保障安全,日均20次使用下续航达180天,兼容iOS13+/Android8.0+系统。功能包括设备绑定、远程授权、开锁记录查询和OTA固件升级,符合个人信息保护法规要求,适用于仓储、快递柜等多场景应用。

moton2017的博客 2112

数据结构与算法

链表 微软暑期实习笔试题 合并两个有序单链表https://blog.youkuaiyun.com/calmreason/article/details/7804774 栈 表达式求值https://blog.youkuaiyun.com/calmreason/article/details/78163268 队列 模拟银行排队叫号https://blog.youkuaiyun.com/calmreason/arti...

C++ 爱好者 make_it_simple888 610

第3.1.3章 机器人第三方库实战总结:ROS 2 入门实战及和ROS1的对比,打通机器人开发的任督二脉

本文针对机器人SLAM开发中第三方库的学习痛点,重点介绍ROS 2在SLAM中的应用。文章首先对比ROS 1与ROS 2的核心差异,梳理ROS 2知识图谱,包括节点、话题、服务等核心概念。通过实战项目演示如何构建激光SLAM节点,结合代码详解运行流程。最后给出学习建议,强调动手实践的重要性,帮助开发者快速掌握ROS 2在SLAM开发中的关键应用。

行知SLAM 180

Claude Code(7):从零创建你的第一个 Skill

在前面的文章,我们介绍了 Skills 的基本概念,这篇我们深入实战,从零开始创建你的第一个 Skill,并逐步解锁所有配置项,让 Claude Code 真正熟悉你的测试规范和习惯。

blues_C的博客 649

微软笔试题 大型文件外部排序(二路归并和k路归并的实现和比较)

这两种排序方法都是先将一个无序的大的外部文件,分成若干块,分别读到内存中。 将每一块都先排好序,放到一个新的外部文件中。 二路归并的思路是每次将外部排序的文件两两合并,变成一个二倍大小的文件,然后对二倍大小的文件继续两两合并。直到最终合并为一个文件为止。 k路归并是将外部排好序的子文件一次合并。先在各个文件中取出第一个数据,放到一个优先级队列中。然后选出最小的数据输出到外部结果文件里。并从最...

java开发指南博客 【转载】 352

yolov11添加P2小目标检测头与添加P6超大目标检测头

本文介绍了YOLO目标检测模型中上下采样的原理及应用。上采样通过插值算法放大特征图,YOLO通常采用最近邻插值;下采样则通过带步长的卷积缩小特征图提取高层语义特征。文章详细阐述了这两种操作在YOLO中的实现方式、结构特点及对称性问题,指出下采样后会使用C3模块进行特征整合,上采样后通过concat抑制分割感。此外,还分析了不同分辨率特征图适合检测不同尺寸目标的原因,并提出添加4倍小目标检测头的方法,即对上采样后的特征进行concat和C3模块处理。最后给出了YOLOv5原模型结构和添加4倍检测头后的结构对比

m0_64661770的博客 821

堆排序实现百万级数据取若干数量的最大数字(java)

      这些天看到了一道题,是一道比较出名的面试题,题目字面上比较简单。      输入若干个float数字(百万级以上) ,编写一个算法从中取出指定数量(100个以内)的最大的数字。      我们先分析一下这道题,从一堆数字里取出几个最大的数,以我们通常的思想去考虑,首先想到的是对这堆数字进行倒序排序,取出前几个就是我们要的结果,这样实现是没错的。可是注意看括号中的注释,输入的数字量级是百...

jayzym的博客 5000

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java -- 超大量数据排序

java -- 超大量数据排序   可以参考下别人的方法: http://mp.weixin.qq.com/s/K94xtyTA50vU6UGG_ho23Q

yjc0403的博客 3729

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

把100000个随机数存进指定文件中,并读取出这100000个数中重复次数最多的10个数

package tulun_study; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; impo...

qq_41974391的博客 1300

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假如有一个很大的文件里面全是数字,你要对其进行排序,你要怎么做呢?

       我们可以将一个很大的文件,切分成很多个小文件,使得每个小文件能够单独的装进内存,并将每个小文件进行内排序(快速排序等等),然后再将多个小文件进行多路归并排序,最终得到一个有序的文件。       多路归并排序在大数据领域也是常用的算法,常用于海量数据排序。当数据量特别大时,这些数据无法被单个机器内存容纳,它需要被切分位多个集合分别由不同的机器进行内存排序(map 过程),然后再进行...

bigdata_player 3184

5 亿整数的大文件,怎么排?

问题   给你1个文件bigdata,大小4663M,5亿个数,文件中的数据随机,如下一行一个整数:   6196302 3557681 6121580 2039345 2095006 1746773 7934312 2016371 7123302 8790171 2966901 ... 7005375   现在要对这个文件进行排序,怎么搞?   ...

轮回の稻草人 406

10^n个整数(亿级)的排序

输入:一个最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数)的文件,其中每个数都小于等于n,且n=10^7。 输出:得到按从小到大升序排列的包含所有输入的整数的列表。 《编程珠玑》中提出的问题,有三种解法: (1)磁盘合并排序 先将所有数据分成多个小文件,多个小文件采用内部排序后,再用多路合并排序完成排序输出。         总数据为n, 内存中采用内部排序最多m。

guyulongcs的专栏 1万+

找出10个最大的文件并排序

当磁盘空间不够的时候,我们需要删除一些比较大的文件。如何找到这些大文件呢?下面的代码能够帮你实现import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class FindTop10File { private static fin

wenjingyu的专栏 1089

boost高质量随机数库

一. 概念 随机数被用在很多场合, 比如数值计算, 游戏, 加密, 测试. 根据场合的不同, 需求的随机数发生器也不尽相同. 可以分为一下三种. non-deterministic random number generator pseudo-random number generator quasi-random number generator [数字发生器{nu

Backer 1万+

[iOS]Runtime2

为了让你在父类中依然能访问当前对象(也就是子类的实例),编译器在底层会生成一个结构体,叫 : 当调用 时,底层调用的函数是 : 拿着(也就是当前的子类对象)作为消息接收者,但是把方法查找的起点定位在了 (父类)这里需要注意的就是仍然是调用者自己,即先讲一下上篇没讲过的,我们如果缓存未命中,那我们就会进入慢速查找,现在我们来详细的讲解在进入慢速查找的瞬间会再看一遍方法列表,然后立刻调用加锁,因为多线程下别人正在动态添加方法或者扩容,不加锁会崩溃类就绪OC的机制就是在编译期只生成了 结构,当类首次被发送消息时(

wzm20070304的博客 258

VS Code + KXApp 开发 iOS 报错排查指南,工程、签名、真机、补全、配置

在 VS Code 里用 KXApp 开发 iOS,报错常不在代码而在环境。本文按失败阶段分五类排查:工程没出现 Xcode 视图(查 .xcodeproj 与 xcode-select)、构建失败(No profiles、Team 签名、CocoaPods 用 .xcworkspace)、真机调试失败(信任、开发者模式、设备未准备好)、没补全或 No such module(等索引、清 clangd 冲突)、设置保存不了(装 xcodeproj gem),每类给现象、日志通道和修法。

2501_91590906的博客 206

Appuploader 创建 iOS 描述文件详解,Development / Ad Hoc / App Store

搞不清 iOS 描述文件(Provisioning Profile)该选 Development、Ad Hoc 还是 App Store?本文讲清四种类型各装到哪、哪些要绑设备、能不能上架,重点辨析最容易混的 Development 与 Ad Hoc,说明设备或证书变动后为什么要重建、重建后要重新导入签名,并给出不用 Mac 在 Windows/Linux 上用 Appuploader 新建与重建描述文件的实操步骤,附装机"描述文件不匹配"等常见问题排查。

2501_91373349的博客 236

VS Code 开发 iOS 工程,KXApp 与 Xcode 分工,双工具协同实操

想用 VS Code 写 iOS 又担心脱离 Xcode、搞乱团队工程?本文讲清 KXApp 和 Xcode 的并用关系:它是 Mac 上的 VS Code 扩展、必须装 Xcode 并调用它构建签名,两边共用编译结果(一边编过另一边不用重编)、共用同一份工程文件不迁移,补全用的 buildServer.json 可 gitignore 不影响同事,签名沿用 Xcode 登录的账户,Cmd+B/R/. 快捷键一致,Interface Builder 和 Instruments 仍回 Xcode。

2501_91592143的博客 70
上一篇: 微软笔试题 跳台阶问题
下一篇: C++合并两个有序的二进制文件
C++程序员Carea
博客等级 码龄18年 1590粉丝 878原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值