二分搜索

来源:互联网 发布:微电影拍摄软件 编辑:程序博客网 时间:2024/06/05 08:45
/*
题目描述820:  
 
二分搜索技术
题目描述
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。
输入
输入包括若干个用例,第一行为一个正整数n表示用例个数,接下来每个用例占两行,第一行为为一个正整数k和x,表示k个元素,要求查找x,第二行为k个已排序正整数,
输出
每个用例用一行输出找出的元素的位置和比较次数,用一个空格隔开,如果不存在,则位置用0表示。
样例输入
4
5 3
1 2 3 4 5
6 7
2 3 4 6 8 10
10 40
1 5 9 10 20 25 33 35 38 39
3 8
2 5 8
样例输出
3 1
0 3
0 4
3 2
*/
//递归实现
#include<stdio.h>
#include<stdlib.h>
int count=0;
int binarySearch(int left,int right,int *a,int x)
{
if(left>right)return 0;
int mid=(left+right)/2;
count++;
if(a[mid]==x)return mid;
if(a[mid]>x) return binarySearch(left,mid-1,a,x);
return binarySearch(mid+1,right,a,x);
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int k;
int x;
scanf("%d %d",&k,&x);
int i;
int *a;
a=(int *)malloc(sizeof(int)*(k+1));
count=0;
for(i=1;i<=k;i++)
{
scanf("%d",&a[i]);
}
int index=binarySearch(1,k,a,x);
printf("%d %d\n",index,count);
}
return 0;
}
0 0
原创粉丝点击