题目:
设a[0:n-1]是已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j:当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
算法目的:
未找到时,返回小于x的最大元素位置和大于x的最小元素位置。
找到时:返回x的位置,此时i=j。
算法设计:
1、初始化两个变量,i 和 j,分别指向数组的起始和结束位置。
2、进行标准的二分搜索,找到元素x或确定x不存在。
3、如果找到x,此时mid指向x,令i=j=mid。
4、如果没有找到x,当循环结束时,i会指向不小于x的最小元素位置,j会指向不大于x的最大元素位置,此时交换i,j,即符合条件。
源代码:
#include<bits/stdc++.h>
using