[周一要去YY面试]100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序 这个题怎么解呀,求大侠们打救我一下,应届生苦B啊

shff11 2013-01-18 11:36:49
100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序
...全文
2161 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
attilax 2013-09-26
  • 打赏
  • 举报
回复
麻烦...网上随便下载个排序算法方法,扔进去走OK了...这样开发效率最高...根本不用管how实现的..要的是结果阿..
wusoule 2013-09-26
  • 打赏
  • 举报
回复
个人是从编程珠玑上来的经验,应该是第一章吧 【100万个数据,数据值在0~65535之间】 对于这个问题,你可以取内存66kb的内存。就是65536个bit。 数据用第几个bit来表示。 比如:数字n,则用第n个bit来标识。 读一遍之后,自然就拍好序了。
wintree 2013-09-15
  • 打赏
  • 举报
回复
Int sort[65535]={0}; void sort(int* array, int n) { //n的值在100万左右 //你的实现 For( int i= 0 ;i <n;i++) { sort [array[i]]++; } }
zilaishuichina 2013-02-21
  • 打赏
  • 举报
回复
既然是0 - 65536 显然是统计排序
积木 2013-02-21
  • 打赏
  • 举报
回复
引用 9 楼 oniisama 的回复:
用快排慢了,应该用Counting sort
顶,不过话说回来,人家说要用较少的内存,所谓排序快的无非就是花费了空间。快速必然带来空间的浪费。所以我觉得又快又省空间这句话完全是p话。
慕少艾 2013-02-21
  • 打赏
  • 举报
回复
不觉的65535这个值很诡异么,其实出题的已经指明了让你思考的方向。 想想吧,往这个方向想,肯定一百分。
billzheng 2013-02-21
  • 打赏
  • 举报
回复
引用 32 楼 tudou23115 的回复:
引用 1 楼 ppsharp 的回复:数据在哪里?数据库吗? 遍历一遍丢给list(STL),list默认自动帮你排了!!!
What???? I have never head that std::list does automatic sort. MAN!! do you mean std::set???
麻浦区保安 2013-02-21
  • 打赏
  • 举报
回复
引用 1 楼 ppsharp 的回复:
数据在哪里?数据库吗?
遍历一遍丢给list(STL),list默认自动帮你排了!!!
gyzsky 2013-01-28
  • 打赏
  • 举报
回复
计数排序问题,不解释!
追逐曙光 2013-01-28
  • 打赏
  • 举报
回复
其实这个是看效率,一般排序都占时间。主要是看思想。应该是放到文件里操作文件什么的,总之不是真正的排序题。
ForestDB 2013-01-28
  • 打赏
  • 举报
回复
假定100W个数据为int a[100W] 定义int c[65536] for i in a c[i]++ for i from 0 to 65535 c[i]为几,就打印多少个i出来 // 即c[0]为几,就打印几个0 换个思路
crazy_samba 2013-01-21
  • 打赏
  • 举报
回复
这是一道典型的计数排序问题啊。 先定义一个大小为65536的计数数组array[65536],100万数据的元素值为计数数组的下标,因为(2的16次方) < 100万 < (2的32次方),所以这数组类型应该为int array[65536]。数组的值为该元素在数组中出现的次数。 比如array[i]的值为i在100万数据中出现的次数。那么遍历一遍100万个数据就可以得到0~65535出现的次数。 然后遍历这个计数数组就可以得到排完序的结果。
不要做咸鱼 2013-01-21
  • 打赏
  • 举报
回复
这个也可行哦,就是不用复制了,直接按数据和数组下标匹配,相应的数组中的值+1,最后按照数组中值来输出就可以。
shff11 2013-01-20
  • 打赏
  • 举报
回复
引用 9 楼 oniisama 的回复:
用快排慢了,应该用Counting sort
求程序 void sort(int* array, int n) { // n的值在100万左右 // 你的实现 }
shff11 2013-01-20
  • 打赏
  • 举报
回复
引用 20 楼 wallwind 的回复:
根本不需要什么排序。复杂度为O(N) ,遍历一遍就ok,。。。。 for1...n if vilue=1, put.. ..... end
小弟应届生没看懂~~~总分100分的题,不可能20分的题就写两句吧
wintree 2013-01-20
  • 打赏
  • 举报
回复
根本不需要什么排序。复杂度为O(N) ,遍历一遍就ok,。。。。 for1...n if vilue=1, put.. ..... end
zhangtonghui816 2013-01-20
  • 打赏
  • 举报
回复
各位说得已经很详细了,是的一个数组跟数据比起来微不足道,可以算O(1),用数组记录是最讨巧的方法,其他情况下一般最优的复杂度也是O(nlogn)了。
zhangtonghui816 2013-01-20
  • 打赏
  • 举报
回复
这题遇到过复杂度O(n),空间复杂度O(1),最优的。
shff11 2013-01-20
  • 打赏
  • 举报
回复
100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序(20分) void sort(int* array, int n) { // n的值在100万左右 // 你的实现 } 是这样的
Lena-Yang 2013-01-20
  • 打赏
  • 举报
回复
牛人很多啊、
加载更多回复(19)

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧