社区
数据结构与算法
帖子详情
给4000000个1~999的整数排序,估计最快要多长时间?
changxing
2001-04-22 06:26:00
我试了一下,27s,30M内存(太大了)
pii350,gcc 2.95.2,win2k,radix sort
应该还能再快点吧
谁能指点一个好方法,谢谢了
...全文
117
9
打赏
收藏
给4000000个1~999的整数排序,估计最快要多长时间?
我试了一下,27s,30M内存(太大了) pii350,gcc 2.95.2,win2k,radix sort 应该还能再快点吧 谁能指点一个好方法,谢谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
WadeHan
2001-10-09
打赏
举报
回复
up
陈硕
2001-10-01
打赏
举报
回复
gz
changxing
2001-04-25
打赏
举报
回复
谢谢大家
changxing
2001-04-25
打赏
举报
回复
啊?这里的帖子不能给分呀?
严黎斌
2001-04-23
打赏
举报
回复
大家注意g9yuayon(渡渡鸟) 的算法,不错呀。
g9yuayon
2001-04-23
打赏
举报
回复
归并排序是divide-and-conquer算法,也就是说,它把问题拆分成子问题,待解出子问题后,再
把子解合并起来。这种解法一般用递归。具体到这道题,假设我们把要排序的数分成两堆,而且
每堆都已排好序了,那我们只需把两堆合并起来。合并可以在O(n)时间做完,因为我们可以每次从两堆数据中各读一个,然后把小的(假设递增排序)放进解答,然后读入小的所在那堆数据中
的下一个,然后和剩下的比较,如此反复。。。直到一堆处理完了,我们便把剩下的那堆放在解答
的最后(反正这堆都排好了)。伪代码:
merge(array result, array A1, array A2){ // A1 and A2 are sorted
int i = 0, j = 0;
int length = 0;
// A1 或 A2 还 剩有未处理的元素
while( length < lengthOf(A1) or length < lengthOf(A2) ){
if(A1[i] <= A2[j]){
result[length] = A1[i];
i++;
}else{
result[length] = A2[j];
j++;
}
length++;
}
//只有一个while loop会被执行
while(length < lengthOf(A1)){
result[length] = A1[length];
length++;
}
while(length < lengthOf(A2)){
result[length] = A2[length];
length++;
}
return result;
}
算法复杂度:o(n)
比如A1=1, 3, 5, 7, 8; A2 = 2, 3, 4, 5, 6, 则排序的次序是1, 2, 3(from A1),
3(from A2), 4, 5(from A2), 5(from A1), 6, 7, 8.
有了合并的方程,我们就可以把原始数据细分成n个子数组,每个里面只有一个元素,然后两两
合并,直到形成答案。细分算法复杂度log(n),所以总复杂度:O(nlog(n))。代码很简单,你
就自己写吧。
这个的问题是nlog(n)的常数项其实比较大,所以归并的平均表现不如快速排序,但最坏表现
比快速排序好(快速排序最坏O(n^2)).
changxing
2001-04-23
打赏
举报
回复
我用的基数排序也是利用了数组递增的特点,所有时间都是集中在输入输出上了
我想知道归并排序的原理,能讲解一下吗,我会加分的。
g9yuayon
2001-04-23
打赏
举报
回复
对这道题来说,不用什么专门的排序法。创建一个数组a[999](假设用C的语法),清零。然后读入数据。对没一个数据data,a[data-1]++。从a[0]开始,打印a[data]个data,就成了(假设你要
的是递增顺序)。算法复杂度:0(n), 空间复杂度:0(n). why? 充分利用了数组的Index已经
排序的性质。对比最快的排序算法(基于数据比较的):0(n*log(n)).问题:如果要你数据中
所有的数,没个数中只挑一个,还不能用数组,怎么做?http://www.programmingpearls.com
上有精彩论述。
windindance
2001-04-22
打赏
举报
回复
用归并排序,应该快很多。
漫画:如何判断一个数是否在40亿个
整数
中?
文章来源于:https://wwww.iamshuaidi.com,一个专注于校招,面试,...吕老师:哈哈,从磁盘加载数据是磁盘io操作,是非常慢的,你每次都要加载这么大的数据,还要8次,我
估计
你找一个数的时间可以达到分钟甚至小时级.
有10亿个
整数
,要求选取重复次数最多的100个
整数
要解答这个问题,首先要弄清楚下面几个条件。 (1)有内存限制吗? (2)
整数
的范围是多少?有符号,无符号,32位还是64位? (3)
整数
集的内容大吗?(即出现的
整数
空间的大小大吗?) (4)如果只需...
【编程珠玑】第一章 开篇
如何在1MB的空间里面对一千万个
整数
进行
排序
?并且每个数都小于1千万。实际上这个需要1.25MB的内存空间(这里所说的空间是考虑用位图表示法时,每一位代表一个数,则1千万/(1024*1024*8) 约为1.25MB )。 1MB...
10亿个数选取重复次数最多的100个
整数
有10亿个
整数
,要求选取重复次数最多的100个
整数
要解答这个问题,首先要弄清楚下面几个条件。 (1)有内存限制吗? (2)
整数
的范围是多少?有符号,无符号,32位还是64位? (3)
整数
集的内容大吗?(即出现的...
一道笔试题:从1亿个
整数
中找出最大的一万个
<br />今天看到一篇赖永浩大牛的博客,由一道笔试题目... 题目:从1亿个
整数
中找出最大的一万个。 赖永浩的解法: 基本思想是维持一个数组记录当前最大的一万个数,每来一个新数
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章