题目来自:《C语言精选名题百则技巧篇》
问题描述:已知一个整数数组x[],其中的元素彼此都不相同,而且也已经从小到大排列好。请用比较大小,相等的方式编写一个程序,找出给定的数组中是否有一个元素满足x[i]==i
(注意:在代码中是从0开始索引的,也就是x[0]是第一个数,所以对应于代码也就是x[i]==i+1)
的关系。举例而言,如果x[]={-2,-1,3,7,8},x[3]=3,因此3就是答案。
思路:利用x[]中的元素彼此都不相同而且从小到大排列,可以用二分查找法。代码很简单。
1 #include <stdio.h> 2 #define MAX 1000 3 4 //prototypes 5 int BinarySearch(int a[],int high,int low); 6 7 int main() 8 { 9 int x[MAX]={-2,2,4,7,8};//x[i]=i+1; 10 int low=0; 11 int high=4; 12 int result=BinarySearch(x,high,low); 13 printf("%d\n",x[result]); 14 } 15 16 int BinarySearch(int a[],int high,int low) 17 { 18 while(low<=high) 19 { 20 int mid=low+(high-low)/2; 21 if(a[mid]==mid+1) 22 return mid; 23 else if(a[mid]>mid+1) 24 high=mid-1; 25 else 26 low=mid+1; 27 } 28 return -1; 29 }
如果你觉得我的文章对你有帮助,请赞一下,非常感谢!
本文转自NeilHappy 51CTO博客,原文链接:http://blog.51cto.com/neilhappy/1139248,如需转载请自行联系原作者