嵌入式之二分法
二分法
代码实现
以下是一个简单的例子:根据ADC值查找对应温度值
| 1 | unsigned short ADC_Table[101] = { | 
问题
- 二分法为什么会陷入死循环?
判断条件选取的不对,多一个 = 就有可能陷入死循环;另外数组最好为单数,双数极可能陷入死循环
- 为什么 while (left <= right)用<=不用<?
因为 right 的值为 数组元素个数 - 1 ,这时 left 与 right 是可以相等的
- 为什么取中间数要写成 int mid = left + (right - left) / 2;这样?
因为若 left + right 很大的时候会发生整形溢出,这样写可以尽量避免
- 为什么判断条件写成 if (arr[mid] >= x && arr[mid + 1] <= x)这样?
因为数组元素为 unsigned short 型,不会出现浮点数,且数组元素不是等差为1的等差数列,不是非此即彼,可能会出现 arr[mid] >= x && arr[mid + 1] <= x 这种情况
- 建议:遇到死循环将 leftrightmid打印出来看看,以判断死循环原因
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 龙猫知识库!
