数据结构顺序表应用6:有序顺序表查询
来源:互联网 发布:老电视接网络电视 编辑:程序博客网 时间:2024/06/06 20:20
顺序表应用6:有序顺序表查询
Time Limit: 7MS Memory Limit: 700KB
Problem Description
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!”。
Input
第一行输入整数n,表示顺序表的元素个数;
第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。
Output
输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!
Example Input
10
1 22 33 55 63 70 74 79 80 87
4
55 10 2 87
Example Output
4
No Found!
No Found!
10
Hint
思路:这题运用到一个算法 二分查找 用普通的查找方法会超时。二分查找的思路就是首先你的序列得是有序。题目给了是从小到大,找中间的数和需要查找数比较,如果中间数大于查找数,区间就缩小为左边,反之右边,不断的递归调用函数,直到找到或者找不到(left>right)退出。
#include<stdio.h>#include<stdlib.h>typedef struct node{ int data[20010]; int last;}ST;void creat(ST *head){ int i; for(i = 0; i < head->last; i++) scanf("%d", &head->data[i]);}int search(ST *head, int left, int right, int key){ int mid; if(left <= right) { mid = (left + right)/2; if(key == head -> data[mid]) { return mid+1; } else if(key > head->data[mid]) { return search(head, mid+1, right, key); } else { return search(head, left, mid - 1, key); } } return 0;}int main(){ ST *head; int t, key, k; head = (ST *)malloc(sizeof(ST)); scanf("%d", &head->last); creat(head); scanf("%d", &t); while(t--) { scanf("%d", &key); k = search(head, 0, head->last, key); if(k) printf("%d\n", k); else printf("No Found!\n"); } return 0;}
0 0
- 数据结构顺序表应用6:有序顺序表查询
- SDUT 3330顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 【3330】顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- sdut oj3330 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 浮层水平垂直居中方法
- Android.mk-1
- Lucene6.10教程(二) 搜索
- GridView实现简单的应用启动器Launcher
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试
- 数据结构顺序表应用6:有序顺序表查询
- 使用Picasso加载图片记录
- IO流_try...catch的方式处理异常2
- 计算机网络之网络层(VPN和NAT)
- 面试中的一些问题
- Android(3)
- 实时计算神器:binlog
- 获取手机中已安装的应用
- 一些工作总结