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实现的另一种思路,参考看看传送门

原文地址:https://www.cnblogs.com/victoria-c/p/6297190.html