如果被查找的有序序列存在多个相同的值a,则普通的二分法返回的结果无法确定是第几个a。
在上述常见的二分法的基础上,可以设置flag参数(如果flag=0则表示查找第一个a,如果flag=1则表示查找最后一个a),则改进的二分法的算法逻辑如下:
步骤1.判断被查找有序序列 arr[] 的中间值 arr[mid] , 其中mid=(low+high) 整除 2 ,low 和 high表示被查找序列中最小值和最大值的索引值。如果 arr[mid]等于被查找值a,则将mid值赋给tmp;
步骤2.如果上述flag被设置为0,则将high设置为mid-1,即进而在mid左侧搜索,准备更新tmp;
如果上述flag被设置为1,则将low设置为mid+1,即进而在mid右侧搜索,准备更新tmp;
步骤3.如果搜索完成(low>high)则算法终止,如果搜索未完成,则返回步骤1。
欢迎大家转发,一起传播知识和正能量,帮助到更多人。期待大家提出宝贵改进建议,互相交流,收获更大。辛苦大家转发时注明出处(也是咱们公益编程交流群的入口网址),刘经纬老师共享知识相关文件下载地址为:http://liujingwei.cn