问题:有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,打印出“无此数”。
//算法思想:数组中是从大到小有序存放的15个数,按折半查找方法找出该数的位置
//a[mid]<x,往左边找,r=mid-1;a[mid]>x,往右边找,l=mid+1; x=a[mid]代表已经找到
//当l>r,说明该数不在数组中,打印出“无此数”
代码:
#include<bits/stdc++.h>
using namespace std;
int findd(int a[],int n,int x){
int l=0,r=n-1,mid;
while(l<=r){
mid=(l+r)/2;
if(a[mid]>x){
l=mid+1;
}else if(a[mid]<x){
r=mid-1;
}else return mid;
}
return -1;//如果没查找到
}
int main(){
int a[20]={20,19,18,16,14,12,9,8,7,6,5,4,3,2,1};
int n=15;
int x;
cout<<"请输入你要查找的值:";
cin>>x;
if(findd(a,n,x)==-1){
cout<<"没找到"<<endl;
}else{
cout<<findd(a,n,x)<<endl;
}
return 0;
}