二分查找

二分查找的前提必須是數組是有序的。


二分查找的思想爲:

   在有序的數組中,先取出中間元素。然後判斷要查找的值與中間值是否相等, 若相等則直接返回結果,查找成功。

   若不相等,則判斷中間值是否小於搜索值,若小於要搜索的值,則在中間值的右半區繼續找。若大於要搜索的值,則在中間值的左半區繼續找。不斷重得這個過程。直到找到數組的結尾。


代碼如下:

#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;
}

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章