免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: aero
打印 上一主题 下一主题

在10000000个数(int)中求最小的10000个数 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2007-08-23 02:08 |只看该作者
我有个想法
快排的时候pation把目标分为两个区间
左区间小于右区间

k=10000
设左区间有p个数
若p<k 则 k=k-p;递归的对右区间继续分区  
若p>k 则递归的对左区间继续分区  
若p==k 结束

论坛徽章:
0
32 [报告]
发表于 2007-08-23 08:02 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
33 [报告]
发表于 2007-08-23 08:30 |只看该作者
int型的数,如果没有4g的内存,怎么用计数排序,
这个题还是如32楼用快速排序的思想较好

论坛徽章:
0
34 [报告]
发表于 2007-08-23 08:47 |只看该作者
原帖由 ypxing 于 2007-8-22 23:27 发表
经典的计数排序呀
int *pi;
pi = (int*)malloc(sizeof(int)*INT_MAX);
遍历给定的10000000个数
用这个数组记录每个数字出现的次数
然后,再次遍历该数组,直到累计到10000



能执行成功吗?
这可是2G * 4 内存(32位)

论坛徽章:
0
35 [报告]
发表于 2007-08-23 09:03 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
36 [报告]
发表于 2007-08-23 09:46 |只看该作者

回复 #35 nully 的帖子

10000000个数不应该一次读到memory中.

内存中只需要保存需要的10000个数就可以. 不时的把不符合条件的数据替换了就可以!!!

论坛徽章:
0
37 [报告]
发表于 2007-08-23 09:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
38 [报告]
发表于 2007-08-23 10:06 |只看该作者
patical_sort应该是C++最合适的了,哪位知道C语言有没类似的实现?或者哪个C语言开源项目有类似的实现?

[ 本帖最后由 apsong 于 2007-8-23 10:07 编辑 ]

论坛徽章:
0
39 [报告]
发表于 2007-08-23 10:06 |只看该作者
原帖由 zhkl125 于 2007-8-23 09:03 发表
#include
#include
#include

using namespace std;

void main()
{
        vector vecTmp;
        vecTmp.push_back(2);
        vecTmp.push_back(1);
        vecTmp.push_back(3);
        vecTmp.push_back(4);
        vecTmp.pus ...

既然用了stl的话,还可以写得紧凑些

  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iterator>
  6. #include <functional>
  7. #include <cstdlib>

  8. using namespace std;

  9. void main()
  10. {
  11.         vector<int> vecTmp;
  12.         generate_n(back_inserter(vecTmp), 10, rand);
  13.         partial_sort(vecTmp.begin(), vecTmp.begin()+6, vecTmp.end(), less<int>());
  14.         copy(vecTmp.begin(), vecTmp.begin()+6, ostream_iterator<int>(cout, " "));
  15. }
复制代码

论坛徽章:
0
40 [报告]
发表于 2007-08-23 10:13 |只看该作者
用partial_sort就是错的,前10000个不需要排序。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP