请问一下有没有大佬可以解释一下这个程序什么意思,特别是里面sfind怎么理解,急求!
/*在一个有序序列中,用二分法查找指定元素,若找到返回该值第一次出现的位置,若未找到,返回0。输入n及n个从小到大排好的有序整数,再输入一个整数x,用二分查找法,查找x是否在
n个整数中出现过,若出现,指出第一次出现的位置;若未出现过,返回0。【输入】第一行:
一个整数,整数的个数n;第二行:n个用空格隔开的有序整数;第三行:一个整数,要找的x;
【输出】一行:一个整数,输出x第一次在所给序列中出现的位置,不存在返回0 */
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a;
int sfind(int a[],int s,int t,int x)
{if(s>t)return 0;
int mid=(s+t)/2;
if(x<a)return sfind(a,s,mid-1,x);
else if(x>a)return sfind(a,mid+1,t,x);
else{if(mid==s)return mid;//找到,返回位置
else if(a==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;//输入n个从小到大排列好的整数
cin>>x;//输入要查找的整数x
cout<<sfind(a,1,n,x)<<endl;
return 0;}
怪不得你看不懂,这人写代码的方式本来就让人恶心 老八秘制 发表于 2020-6-8 15:23
怪不得你看不懂,这人写代码的方式本来就让人恶心
考试要考这个题
页:
[1]