首页 > 代码库 > 二分查找

二分查找

二分查找的前提必须是数组是有序的。


二分查找的思想为:

   在有序的数组中,先取出中间元素。然后判断要查找的值与中间值是否相等, 若相等则直接返回结果,查找成功。

   若不相等,则判断中间值是否小于搜索值,若小于要搜索的值,则在中间值的右半区继续找。若大于要搜索的值,则在中间值的左半区继续找。不断重得这个过程。直到找到数组的结尾。


代码如下:

#include <stdio.h>

/*
  二分查找 
  
  1,34,56,7,8,90,456,3,234,4,54,23,45
  在表中查找值为54的数据元素。
*/
int biSearch(int arr[],size_t len,int search); 
 

int main()
{
	int arr[] = {1,34,56,7,8,90,456,3,234,4,54,23,45};
	int count = sizeof(arr)/sizeof(arr[0]);
	int search = 54;
	int result = biSearch(arr,count,search); 
	if(result >= 0){
		 printf("%d 在 arr中,索引是:%d",search,result);
	}else{
		 printf("%d 不在 arr中",search);
	} 
}
 

/*
 二分查找 
*/
int biSearch(int arr[],size_t len,int search)
{
   int mid = 0,midvalue = 0, flag = -1,low = 1,high = len;   
   while( low <= high	){
      /*
        先遍历数组,每次取中间值,判断是否等于搜索值,如果不是再判断是从左边还是右边
        继续搜索
      */
   	      mid = (low+high)/2;    
   	      midvalue = arr[mid];
   	   if(search	== midvalue	){ 
   	   	     flag =  mid;
  	   	     break;
   	   }else if(midvalue > search	){
   	          high = mid-1;
   	   }else if(midvalue	< search	){
   	   	      low = mid+1;
   	   }  
   } 
   return flag;
}

  

二分查找