用二分的前提是数据已经升序排好,切记切记
#include<stdio.h> int BSearch(int A[],int n,int key)//A[]存放数据的数组;n数据个数;key要搜索内容 { int l, r, m; l=0,r=n-1; while(l<=r) { m=l+(r-l)/2;//不用(l+r)/2避免数据溢出 if(A[m]<key)//向右查找 l=m+1; else if(A[m]>key)//向左查找 r=m-1; else return m;//找到 } return -1; } int binSearch(int a[], int begin, int end, int k)//比较鬼畜的写法。。压行不是梦。。 { int mid = begin + ( (end - begin)>>1 ),index; index = a[mid] < k && begin + 1 <= end ? binSearch(a,mid+1,end,k) : ( a[mid] > k && begin + 1 <= end ? binSearch(a,begin,mid,k) : mid * (a[mid] == k) + (a[mid] != k)*(-1)); return index; } int main() { int n, i, key, result, result1; int A[100]; scanf("%d", &n); for(i=0;i<n;i++) { scanf("%d", &A[i]); } scanf("%d", &key); result=BSearch(A,n,key); result1=binSearch(A,0,n-1,key); if(result>=0) printf("%d\n", result);//下标大于等于0即找到该数据 else puts("null"); if(result1>=0) printf("%d\n", result1); else printf("null\n"); return 0; }
时间: 2024-12-18 08:56:00