|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
/*在一个有序序列中,用二分法查找指定元素,若找到返回该值第一次出现的位置,若未找到,
返回0。输入n及n个从小到大排好的有序整数,再输入一个整数x,用二分查找法,查找x是否在
n个整数中出现过,若出现,指出第一次出现的位置;若未出现过,返回0。【输入】第一行:
一个整数,整数的个数n;第二行:n个用空格隔开的有序整数;第三行:一个整数,要找的x;
【输出】一行:一个整数,输出x第一次在所给序列中出现的位置,不存在返回0 */
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a[100];
int sfind(int a[],int s,int t,int x)
{ if(s>t)return 0;
int mid=(s+t)/2;
if(x<a[mid])return sfind(a,s,mid-1,x);
else if(x>a[mid])return sfind(a,mid+1,t,x);
else{ if(mid==s)return mid;//找到,返回位置
else if(a[mid-1]==x)return sfind(a,s,mid-1,x);
else return mid;}}
int main()
{ int n,i,x,k;
cin>>n;//输入n
for(i=1;i<=n;i++)cin>>a[i];//输入n个从小到大排列好的整数
cin>>x;//输入要查找的整数x
cout<<sfind(a,1,n,x)<<endl;
return 0;}
|
|