顺序表应用6:有序顺序表查询
2016-05-30 22:00
393 查看
顺序表应用6:有序顺序表查询
Time Limit: 7ms Memory limit: 700K 有疑问?点这里^_^
题目描述
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。
输入
第一行输入整数n,表示顺序表的元素个数;第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。
输出
输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!
示例输入
10 1 22 33 55 63 70 74 79 80 87 4 55 10 2 87
示例输出
4 No Found! No Found! 10
提示
这个题主要的地方是用到了折半查找,也称为二分查找,使用顺序遍历查找的话效率较低 会超时!#include<stdio.h> #include<stdlib.h> typedef struct { int *elem; int length; int Listsize; }List;//结构体定义 void creat(List *L,int n)//顺序表的建立 { int i; L->elem=(int *)malloc(n*sizeof(int )); L->length=0; for(i=1; i<=n; i++) { scanf("%d",&L->elem[i]); L->length++; } L->Listsize=n; } int Binary_search(List *L,int n,int key) { int low =1; int high=n; int mid=0; while(low<=high) { mid = (low+high)/2;//折半 if(key<L->elem[mid]) high=mid-1;//最高小标调到比中位小一 else if(key>L->elem[mid]) low = mid+1;//最低小标调到比中位多一 else return mid; //若相等则返回相应位置 } return 0; } void main() { int n,m; int result=0; int x; int i; List *L; L=(List *)malloc(sizeof(List ));//给结构体指针分配内存 L->elem=NULL; scanf("%d",&n); creat(L,n); scanf("%d",&m); while(m--) { scanf("%d",&x); result=Binary_search(L,n,x);//调用折半查找 if(result!=0) printf("%d\n",result); else printf("No Found!\n"); } }
相关文章推荐
- 分治法——棋盘覆盖问题
- SlidingMenu(侧滑框)的使用、ViewPager冲突处理
- 百度地图的使用(定位)
- Dvm的进程和Linux的进程
- 第二次冲刺第二天
- Oracle Function详解
- 实时显示今年还剩下几天几时几分几秒(js,练习Date的方法)
- 动态规划—Problem R
- 作业
- ImageLoader
- Linux 配置jdk 最完整的
- 15类 Android 通用流行框架大全
- hiho_1069_最近公共祖先3
- STM32F0xx_DMA收发USART数据配置详细过程
- 使用jquery获取父元素或父节点的方法
- 关系模式
- 折半插入排序
- CSAPP3e - x86-64 assembly code analysis - Bomb Lab: phase 2
- 安装Mysql碰到的一些问题。
- Spring ApplicationContext