#include <cstdio>
/*
减少while里的那次判断.这样的代码更加好.
*/
int binarySearch(int a[], const int & len, const int & value)
{
int low = -1;
int high = len;
while (high - low > 1) {
int mid = (high+low)/2;
int midValue = a[mid];
if (midValue > value)
high = mid;
else low = mid;
}
if (low == -1 || a[low] != value)
return -1;
return low;
}
int main()
{
int a[] = {1,2,3,4};
for (int i = 1; i < 5; ++i)
printf("%d\n",binarySearch(a,sizeof(a)/sizeof(a[0]),i));
//完美的测试
//1.先冒烟测试
//2.边界测试
//3.随机测试
//4.性能测试
while (true) ;
return 0;
}
写代码没那么简单!
#include <cstdio>
bool binaryQuery(int a[],int len, int value)
{
int low = 0;
int high = len - 1;
while (low < high) {
int mid = low + (high - low)/2;
int midValue = a[mid];
if (midValue == value) {
return true;
}
if (midValue < value) {
low = mid + 1;
} else {
high = mid;
}
}
return a[low] == value;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8};
if (binaryQuery(a,sizeof(a)/sizeof(a[0]),1))
printf("find!\n");
else printf("No!\n");
while (true) ;
return 0;
}
会二分就值8K.我不值!