【问题描述】 针对以非递增有序表表示的静态查找表,编写递归的折半查找算法。
【输入形式】该静态查找表从下标1开始存放数据,存放数据按照非递增顺序,具体输入形式如下:
5 //输入元素个数
33 29 25 20 12 //按照非递增顺序连续输入多个数,每个数之间用一个空格隔开
29 //输入需要查找的数
【输出形式】如果找到则输出该数据在查找表中的下标,如果找不到则输出0
如 查找29则会输出2
【样例输入】5
33 29 25 20 12
29
【样例输出】 2
#include<stdio.h> int search(int key[],int low,int high,int k) { int mid; if(high<low) return -1; else { mid=(low+high)/2; if(key[mid]==k) return mid; if(k>key[mid]) return search(key,low,mid-1,k); else return search(key,mid+1,high,k); } } int main() { int n,i,p,add; int a[20]; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d ",&a[i]); } scanf("%d",&p); add=search(a,1,n,p); if(-1!=add) printf("%d",add); else printf("0"); return 0; }