博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
经典入门_排序
阅读量:5076 次
发布时间:2019-06-12

本文共 1317 字,大约阅读时间需要 4 分钟。

例2.10 查找学生信息 (1069)

题目描述:输入N个学生的信息,然后进行查询。 输入: 输入的第一行为N,即学生的个数(N<=1000),接下来的N行包括N个学生的信息,然后输入一个M(M<=10000),接下来会有M行,代表M次查询,每行输入一个学号。 输出: 输出M行,每行包括一个对应于查询的学生的信息。如果没有对应的学生信息,则输出“No Answer!”
样例输入:401 李江 男 2102 刘唐 男 2303 张军 男 1904 王娜 女 1950203010403样例输出:02 刘唐 男 2303 张军 男 1901 李江 男 2104 王娜 女 1903 张军 男 19

这道题如果采用线性遍历数组来查找是否存在我们需要的元素,那么该算法的时间复杂度达到了O(n*m),而这已达到了千万数量级,是我们不愿意看到的。

利用二分查找,原来O(n*m)的时间复杂度被优化到O(nlogn(排序)+mlogn),符合我们的要求。

#include
#include
#include
using namespace std;struct Student{ char name[100]; char sex[5]; int age; char no[100]; bool operator <(const Student &B)const{ return strcmp(no,B.no)<0; }}buf[1000];int main(){ int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i
=base){
//二分查找 int mid=(top+base)/2; int tmp=strcmp(buf[mid].no,x); if(tmp==0){ ans=mid; break; } else if(tmp>0) top=mid-1; else base=mid+1; } if(ans==-1) printf("No Answer!\n"); else printf("%s %s %s %d\n", buf[ans].no,buf[ans].name,buf[ans].sex,buf[ans].age); } } return 0;}

 

转载于:https://www.cnblogs.com/exciting/p/8415818.html

你可能感兴趣的文章
Mysql与Oracle 的对比
查看>>
jquery实现限制textarea输入字数
查看>>
thinkphp5 csv格式导入导出(多数据处理)
查看>>
PHP上传RAR压缩包并解压目录
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
jenkins常用插件汇总
查看>>
c# 泛型+反射
查看>>
第九章 前后查找
查看>>
Python学习资料
查看>>
jQuery 自定义函数
查看>>
jquery datagrid 后台获取datatable处理成正确的json字符串
查看>>
ActiveMQ与spring整合
查看>>
web服务器
查看>>
网卡流量检测.py
查看>>
poj1981 Circle and Points 单位圆覆盖问题
查看>>
POP的Stroke动画
查看>>
SQL语句在查询分析器中可以执行,代码中不能执行
查看>>
yii 1.x 添加 rules 验证url数组
查看>>
html+css 布局篇
查看>>
SQL优化
查看>>