SDUT 数据结构上机实验之二分查找
2014-02-13 11:53
267 查看
数据结构上机实验之二分查找
Time Limit: 1000MS Memory limit: 65536K
题目描述
在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.输入
本题多组数据,首先输入一个数字n,然后输入n个数,数据保证数列递增,然后再输入一个查找数字。输出
若存在输出YES,不存在输出NO.示例输入
4 1 3 5 8 3
示例输出
YES
提示
来源
cz示例程序
[csharp] viewplaincopy
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, *s; // 数据个数, 数组用动态分配内存
int left, right, mid;
int x; // 要查找的数
int i;
while (scanf("%d", &n) == 1 && n > 0)
{ // 输入数据个数
s = (int *)malloc(n*sizeof(int)); // 分配内存
if (s == NULL)
exit(0);
for (i = 0; i < n; i++) // 输入数据
scanf("%d", &s[i]);
scanf("%d", &x); // 输入要查找的数
// 以下查找和输出
left = 0;
right = n-1;
while (left <= right)
{ // 加个等于, 因为有等于的情况
mid = (left + right)/2;
if (s[mid] == x)
{
printf("YES\n");
break; // 用break结束循环
}
else if (s[mid] < x)
left = mid + 1;
else
right = mid - 1;
}
if (left > right) // 加一个判断, 当left大于right时, 说明数不存在数组里面.
printf("NO\n");
}
}
#include<stdio.h> int a[10000000]; int main() { int key, n, i; int low, high, mid; while( ~scanf("%d", &n)) { int k=0; low = 1; high = n; for(i=1; i<=n; i++) scanf("%d", &a[i]); scanf("%d", &key); while(low<=high) { mid = (low+high)/2; if(key==a[mid]) { k = mid; break; } else if(key<a[mid]) high = mid -1; else low = mid + 1; } if(k!=0) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- SDUT 数据结构上机实验之二分查找
- 新总帐的数据结构
- 数据结构-学习笔记0
- 数据结构上机实验之二分查找
- 面试突击——数据结构基础,排序
- 数据结构研究 ----单链表的按序号查找
- 数据结构-各种排序算法效率对比图
- 数据结构学习笔记4.5--二叉树效率
- 数据结构学习笔记4.4--删除节点
- 内存数据库(sqlite)和 map数据结构 做缓存对比
- 数据结构之线段树
- prim 算法实现
- 数据结构算法-3
- 数据结构与算法 学习资源
- 数据结构《13》----二叉树 Morris 前序遍历
- 数据结构《13》----二叉树 Morris 前序遍历
- 数据结构《12》----二叉树遍历的非递归版本(不用栈)
- 数据结构《12》----二叉树遍历的非递归版本(不用栈)
- 也谈谈数据结构和算法,说与立志当好程序员的
- 数据结构《11》----二叉树遍历的非递归版本(栈)