#include<stdio.h>++
int seeqSearch(int a[],int n,int k){
int i=n-1;
for(;i>=0;i--){//遍历数组
if(a[i]==k){//找到对应的数组
return i;//返回该数组的下标
}
}
return -1;//失败返回值为-1
}
int binSearch(int a[],int n,int k){
int mid,hig,low;//定义指向中间高位和low的元素
hig=n-1;//为高位指针赋初值
low=0;//地位赋初值
while(low<=hig){//到low大于hig时代表未找到退出循环
mid=(hig+low)/2;//为mid赋值
if(a[mid]==k){
return mid;//当找到到的时候返回该数的下标
}
else if(a[mid]>k){//如果当前的数的值大于k
hig=mid-1;//当前的mid-1赋值给hig
}
else if(a[mid]<k){//如果当前的数的值小于k
low=mid+1;//当前的mid+1赋值给low
}
}
return -1;//失败返回-1
}
int binSearch2(int a[],int low,int hig,int k){//此方法为递归算法
int mid;//定义指向中间的指针
if(low>hig){
return -1;
}else{
mid=(hig+low)/2;//为mid赋值
if(a[mid]==k){
return mid;//当找到到的时候返回该数的下标
}
else if(a[mid]>k){//如果当前的数的值大于k
binSearch2(a,low,mid-1,k);//调用递归算法
}
else if(a[mid]<k){//如果当前的数的值小于k
binSearch2(a,mid+1,hig,k);//调用递归算法
}
}
}
int main(){
int a[10001];//定义一个数组用来存放元素
int n,i=0;//定义一个存放个数和计数器
printf("请输入你要输入的元素的个数:");
scanf("%d",&n);
while(n--){
printf("\n这是你要存入的第%d个元素:\n",i+1);
scanf("%d",&a[i]);
i++;
}
n=i;
printf("请输入你要查找的元素的数值:\n");
int k;
scanf("%d",&k);
i=seeqSearch(a,n,k);//首先是进行顺序查找得到下标
if(i==-1){//当返回值为-1代表没有查到
printf("你拨打的用户不在服务器,请稍后在拨!!!\n");
return 0;
}
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
i=binSearch(a,n,k);//其次是进行二分查找得到下标
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
i=binSearch2(a,0,n-1,k);//递归算法
printf("查找到的元素是第%d个\n",i+1);//打印输出得到的下标的数
return 0;
}