折半法
應該叫做2分法。
用2分法查詢數
需要先對陣列進行排序(升序或降序)
假如你所要查詢的數是20
陣列是 1 4 7 8 20 30 34
每次都拿中間的數跟你要比的數比
也就是 8和20比
發現20比8大
所以左面的數都不要了
剩下的是 20 30 34
再拿20跟30比
發現20比30小
右面的數都不要了
再拿20跟20比
相等,則找到了。
如果找不到返回-1
下面是程式。
#include
using namespace std;
int binarySearch(int* data,int low,int high,int value)
{
int k=(low+high)/2;
if(value*(data+high))
return -1;
}
if(value
return binarySearch(data,low,k-1,value);
else if(value>*(data+k))
return binarySearch(data,k+1,high,value);
else
return k;
void main()
int pos;
int arr1[9]={1,2,3,4,5,6,7,8,9};
int i=9;
while(i)
pos=binarySearch(arr1,0,8,i);
cout
i--;
pos=binarySearch(arr1,0,8,20);
折半法
應該叫做2分法。
用2分法查詢數
需要先對陣列進行排序(升序或降序)
假如你所要查詢的數是20
陣列是 1 4 7 8 20 30 34
每次都拿中間的數跟你要比的數比
也就是 8和20比
發現20比8大
所以左面的數都不要了
剩下的是 20 30 34
再拿20跟30比
發現20比30小
右面的數都不要了
再拿20跟20比
相等,則找到了。
如果找不到返回-1
下面是程式。
#include
using namespace std;
int binarySearch(int* data,int low,int high,int value)
{
int k=(low+high)/2;
if(value*(data+high))
{
return -1;
}
if(value
{
return binarySearch(data,low,k-1,value);
}
else if(value>*(data+k))
{
return binarySearch(data,k+1,high,value);
}
else
return k;
}
void main()
{
int pos;
int arr1[9]={1,2,3,4,5,6,7,8,9};
int i=9;
while(i)
{
pos=binarySearch(arr1,0,8,i);
cout
i--;
}
pos=binarySearch(arr1,0,8,20);
cout
}