我们在C语言编程中,通常会在某些过程中从一组或多组数据中寻找一项符合我们要求的数。
有很多不同的代码编写方式都可以满足我们的需要,只是针对运行编译,不同的代码,运行量会使不同的效果。
例如,从1-100找到55,我们可以使用for循环,while或者do-while循环来编写代码,但是从1-55,每一个数字逐步比较的运行量会耗费一定的时间。在数学中,我们找出某个数,有一种方法叫做“二分法”,常常在数学函数中求点值会使用到。
在C语言算法中,我们也可以使用“二分法”来找到我们需要的数据。
在数学中,在一个闭区间内找到某个值,我们会把这个值与闭区间中间值进行比较,若该值比闭区间中间值小,则在中间值以左的左区间寻找,直接舍弃右区间;同理,若该值比闭区间中间值大,则在中间值以右的右区间寻找,直接舍弃左区间。
在C语言中,我们若在一个数组中寻找某数k,则把k与数组中间数对比(前提是数组是有序数组),若k比数组中间数小,则直接舍弃数组中间数右的数据,减少比较次数;若k比数组中间数大,则直接舍弃数组中间数左的数据,减少比较次数。
我们不妨定义数组有10个元素,并获取数组长度,最左端的下标为left , 最右端的下标为right ,要找的数为k ,则有如下所示: