使用递归实现
1.找到即返回
def binarySearch(array: Array[Int],low:Int,high:Int,findVal:Int): Int ={
if(low<=high){
val mid = low + (high - low)/2
if(array(mid)==findVal)
mid
else if(findVal<array(mid))
binarySearch(array,low,mid-1,findVal)
else
binarySearch(array,mid+1,high,findVal)
}else{
-1
}
}
- 找出所有相等的下标,返回一个ArrayBuffer
def binarySearch2(array: Array[Int],low:Int,high:Int,findVal:Int): ArrayBuffer[Int] ={
if(low<=high){
val mid = low + (high - low)/2
if(array(mid)==findVal) {
val resArr = ArrayBuffer[Int]()
var temp = mid-1
while (temp>=0 && array(temp)==findVal) {
resArr.append(temp)
temp -= 1
}
resArr.append(mid)
temp = mid + 1
while (temp<array.length && array(temp)==findVal) {
resArr.append(temp)
temp += 1
}
resArr
//mid
} else if(findVal<array(mid))
binarySearch2(array,low,mid-1,findVal)
else
binarySearch2(array,mid+1,high,findVal)
}else{
ArrayBuffer[Int]()
}