C++Builder實現二分查找法

最近寫代碼,感受算法能力比較弱,想一想上大學時,特別喜歡數據結構這門課,現在都忘光了,如今想從新複習一下,爲之後寫代碼擴展下思路。html

1、二分法思想java

要求:查詢數組中某個數據所在的位置。算法

前提:所查詢的數據是有序的(咱們假設從小到大排序)數組

思路:數據結構

1.找到數組中間a[middle]的值,和要查找的值value進行比較;函數

2.若是a[middle]>value,在數組前半部分查找,返回步驟1測試

3.若是a[middle]<value,在數組後半部分查找,返回步驟1ui

4.若是a[middle]=value,返回middle值spa

2、C++builder代碼實現code

一、實現函數

 1 int __fastcall TForm1::findValueInArray(int a[],int min,int max,int value)
 2 {
 3     
 4     if( a[min]>value || a[max]<value)
 5     {
 6         return -1;
 7     }
 8     int index = (max+min)/2;
 9     if( value>a[index] )
10     {
11         return findValueInArray(a,index+1,max,value);
12     }
13     else if( value<a[index] )
14     {
15         return findValueInArray(a,min,index-1,value);        
16     }
17     else 
18     {
19         return index;    
20     }
21 } 

2.測試代碼

 1 void __fastcall TForm1::btn1Click(TObject *Sender)
 2 {
 3     int a[15]={1,2,4,8,12,14,16,32,34,46,56,67,68,87,89};
 4     int value = StrToInt(edt1->Text.Trim());
 5     int index = findValueInArray(a,0,14,value); 
 6     if(index == -1)
 7     {
 8         ShowMessage("數組中無此數據!");
 9     }
10     else
11     {
12         ShowMessage("數組的index爲:"+IntToStr(index));        
13     }   
14 }

 

網上查了下資料,有用java實現的另外一種思路,參考看看傳送門

相關文章
相關標籤/搜索