题:
在一个数组指定范围内找出最大值,使用二分法。
输入:
数组起始下标;数组结束下标;数组地址
输出:
数组指定范围内的最大值
具体函数:
uint16 Max(uint16 start, uint16 end, uint16 array[]) { uint16 left = 0; uint16 right = 0; uint16 mid = (start + end) / 2; if (start == end) { return (array[start]); } if ((1 + start) == end) { return ((array[start] < array[end]) ? (array[end]) : (array[start])); } left = Max(start, mid, array); right = Max(mid + 1, end, array); return ((left < right) ? (right) : (left)); }
测试程序:
uint16 g_Array[] = {1, 2, 3, 4, 5}; int main(int argc, char* argv[]) { uint16 maxVal = Max(0, 4, g_Array); printf("The max value is : %u \n", maxVal); return 0; }
如果进入程序调试,可以看到执行步骤如下:
Max(0, 4) >>> Max(0, 2) >>> Max(0, 1) >>> Max(2, 2) >>> Max(3, 4)
以上为函数调用步骤,当然我这里忽略了数组地址。
我这里粗略画了一个流程图:、