二分查找法

来源:互联网 发布:中科院物理所考研知乎 编辑:程序博客网 时间:2024/06/06 17:15

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;//5int 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;}