C++Builder实现二分查找法
最近写代码,感觉算法能力比较弱,想想上大学时,特别喜欢数据结构这门课,如今都忘光了,现在想重新复习一下,为以后写代码扩展下思路。
一、二分法思想
要求:查询数组中某个数据所在的位置。
前提:所查询的数据是有序的(我们假设从小到大排序)
思路:
1.找到数组中间a[middle]的值,和要查找的值value进行比较;
2.如果a[middle]>value,在数组前半部分查找,返回步骤1
3.如果a[middle]<value,在数组后半部分查找,返回步骤1
4.如果a[middle]=value,返回middle值
二、C++builder代码实现
1、实现函数
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实现的另一种思路,参考看看传送门