在一个有序数组中,利用二分法的思想找出数组中的内容。
#include <stdio.h> #include <stdlib.h> int binsearch(int x,int arr[],int left,int right) { while (left<=right) { int mid=left-(left-right)/2; if(arr[mid]==x) { return mid; } else if(arr[mid]<x) { left=mid+1; } else { right=mid-1; } } return -1; } int main() { int arr[]={1,3,44,55,102,129,700}; int ret=binsearch(44,arr,0,sizeof(arr)/sizeof(arr[0]-1)); //查找44 if(ret!=-1) { printf("%d\n",arr[ret]); } else { printf("not exist\n"); } return 0; }
对于程序中,需要定义中间的数组元素,一般都会想到平均int mid=(left+right)/2;但是这种处理方法有一个弊端,当数据较大时,可能会出现溢出,所以程序采用 int mid=left-(left-right)/2;这样刚好就能避免这种错误。
时间: 2024-10-11 20:51:37