问题:
如果一个数列已排序(从小到大),查找指定元素在其中的位置。
解法:
利用数列已排序的特性,从数列的中间开始搜寻,如果这个数小于所搜寻的数,则该数左边的数
一定都小于要搜寻的对象,所以无需浪费时间在左边的数;如果搜寻的数大于所搜寻的对象,则右边的
数无需再搜寻,直接搜寻左边的数。如此类推,直到找到该元素,如果找不到则返回-1。
例如从数列-4, -2, 4, 6, 9, 14, 23, 100中找14。
1、首先从中间(0 + 7)/2=4开始:
< -4 -2 4 6 9 14 23 100 >
2、由于9小于23,所以搜寻右边的数列
-4 -2 4 6 9 < 14 23 100 >
3、由于23大于14,所以搜寻左边的数列
-4 -2 4 6 9 < 14 > 23 100
4、找到目标,返回位置5。
核心代码:
1、 迭代实现
2、 递归实现
全部代码: