1.问题描述
给定排好序的n个元素,在这n个元素找出一特定元素x
2.算法思想
思想是:把有序序列分成大致相同的两部分,然后取中间元素与特定元素x进行比较,如果x等于中间元素,算法停止,如果x小于中间元素,则在序列的左半部分继续查找,然后在序列的左半部分重复分解和治理操作;否则,在序列的右半部分继续查找,然后在序列的右半部分重复分解和治理操作
3.算法设计
步骤1、设置数组s[n]来存放n个已排好序的元素;变量low和high表示查找范围在数组中的上界和下界;middle表示查找范围的中间位置,x为特定元素
步骤2、初始化,low=0,即指向s中的第一个元素;high=n-1,即指向s中的最后一个元素
步骤3:、middle=(low+high)/2,即指向查找范围的中间元素
步骤4、判定low<=high是否成立,如果成立,转步骤5,否则,算法结束
步骤5、判断x与s[middle] 的关系,如果等于s[middle],算法结束,如果大于s[middle],则令low=middle+1;否则令high=middle-1,转步骤3
4、算法实现
非递归方式实现
算法实现的递归形式核心代码