Although the basic idea of binary search is comparatively straightforward, the details can be surprisingly tricky...
这句话可以这样理解:思路很简单,细节是魔鬼。
二分查找的一个优秀作者:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/er-fen-cha-zhao-suan-fa-xi-jie-xiang-jie-by-labula/
二分查找:
在一个给定的无重复元素的递增序列里,输入自己想查找的数,查找与给定数相同的元素,若存在则输出找到的位置,不存在输出-1。
基本思想是:
(这里假设数组元素呈升序排列)将n个元素分成个数大致相同的两半,取arry[n/2]与欲查找的x作比较,
如果x=arry[n/2]则找到x,算法终止;
如 果x<arry[n/2],则我们只要在数组arry的左半部继续搜索x;如果 x>arry[n/2],则我们只要在数组arry的右 半部继续搜索x。
代码实现:
#include<stdio.h>
int search(int array[],int n){
// i = 数组首下标,j = 数组尾下标,mid = 中位数
int i=0,j=7,mid;
while(i<=j){
//
mid=(i+j)/2;
if(n==array[mid])
//找到了,返回的是查找数的下标
return mid;
else
if(n<array[mid])
//在前半断进行查找
j=mid-1;
else
//在后半断进行查找
i=mid+1;
}
return -1;
}
int main(){
//自定义数组
int array[8]={1,2,3,4,5,6,7,8};
// i为数组下标,n为查找的数
int i,n,m;
printf("请输入你想找的数:");
scanf("%d",&n);
m=search(array,n);
if(m==-1)
printf("你要查找的%d不在自定义数组范围内!");
else
printf("%d在数组内 ,他是数组下标为:%d\n",n,m);
return 0;
}