非排序寻找从小到大第3400个数
2015-10-02 16:41
197 查看
题目:有10000个正整数,每个数的取值范围均在1到1000之间,变成找出从小到大排在第 3400(从0开始算起)的那个数,将此数的值返回,要求不使用排序实现。
#include <iostream> #include <algorithm> #include<time.h> using namespace std; #define range 1001 int SaveArray[range] ={0}; int num[10000]; int main() { srand((int)time(0)); /*已当前时间为随机数产生的种子*/ for(int i=0; i<10000; i++) num[i]= (rand()%1000); /*产生10000个0-1000之间的随机数*/ for(int j=0; j<10000; j++) SaveArray[num[j]]++; /*讲随机数以其值为下标的方式存在下标范围为0-1000的数组中*/ int sum = 0, seachnum = 0; for(int k=0; k<range; k++) { sum+= SaveArray[k]; if(sum >= 3400)/*下标较小的数组成员,其代表的随机值也较小*/ { seachnum = k; break; } } cout <<seachnum<<endl; sort(num,num+10000);/*排序一遍,比较结果是否正确*/ cout <<num[3399]<<endl; }
相关文章推荐
- pch文件 解决每个文件都需要重复引入的问题
- Linux 命令 - tail: 打印文件的结尾部分
- 【 D3.js 入门系列 --- 0 】 简介及安装
- hdu1048 The Hardest Problem Ever
- 面试题24:二叉搜索树的后序遍历序列
- UVa12171 Sculpture
- ocp-39
- IOS动画效果
- MyISAM vs InnoDB 分析之一
- HDU 2070 Fibbonacci Number
- python-文件读取
- hdu 1429 状态搜索
- HashTable的实现原理分析
- ocp-38
- 进程间的通信(浅谈)
- ocp-37
- 【C语言】双向链表的实现
- awk 正则表达式、正则运算符详细介绍
- 大数字相加
- Ad-hoc网络