0x00 思想
一说到算法,大家铁定说这特烧脑,其实不然,其实大家在学习语法的时候,就已经学习了这个思想和写过事例代码,只是不知道这就是二分查找法。
我举个例子就一目了然了,猜数字小程序.:指定范围随机生成一个数字,开始输入数字进行猜。如何最快猜出来?我的分析是:首先边界是确定从中间位置区分数值大了,还是小了,之后以中间位置值作为边界,继续进行。
猜数字,这是我用python写的,可以了解一下猜数字小程序,加以理解
0x01 代码实现
//模拟日记记录
#define log_func(msg){\
do \
{ printf("%s \n", msg); \
} while (0);\
\
}
int SearchFunc(int* pArr, int len, int key_value)
{
if ((NULL == pArr) || (len <= 0))
{
log_func("SearchFunc 参数有问题!");
return -1;
}
int max_len = len;//5
int small_len = 0;
int mid_len = (max_len + small_len) / 2;
while (small_len <= max_len)
{
mid_len = (max_len + small_len) / 2;
if (pArr[mid_len] > key_value)
{
max_len = mid_len - 1;
}else if (pArr[mid_len] < key_value)
{
small_len = mid_len + 1;
}
else
{
return mid_len;
}
}
return -1;
}
int main(int argc, char* argv[])
{
int arr[] = {1,2,3,4,5};
int nLen = sizeof(arr) / sizeof(arr[0]);
int index = SearchFunc(arr, nLen, 2);
if (-1 == index)
{
log_func("[error]SearchFunc");
exit(1);
}
printf("索引的位置:%d \n", index);
return 0;
}