标签:折半查找 二分查找
在一个有序数组中,利用二分法的思想找出数组中的内容。
#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;这样刚好就能避免这种错误。
本文出自 “无心的执着” 博客,谢绝转载!
标签:折半查找 二分查找
原文地址:http://10740590.blog.51cto.com/10730590/1702957