最近寫代碼,感受算法能力比較弱,想一想上大學時,特別喜歡數據結構這門課,現在都忘光了,如今想從新複習一下,爲之後寫代碼擴展下思路。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實現的另外一種思路,參考看看傳送門