您的位置:首页 > 理论基础 > 数据结构算法

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] view
plaincopy





#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: