import java.util.ArrayList;
import java.util.List;
public class BinarySearchNoRecur2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]={1,8,1000,1000,1000,1235};
List<Integer> resIndexList=binarySearch2(arr, 0, arr.length-1, 1000);
System.err.println("resIndexList"+resIndexList);
}
public static ArrayList<Integer> binarySearch2(int[] arr,int left,int right,int findVal)
{
if(left>right)
{
return new ArrayList<Integer>();
}
int mid=(left+right)/2;
int midVal=arr[mid];
if(findVal>midVal) //向右查找
{
return binarySearch2(arr, mid+1, right, findVal);
}else if (findVal<midVal) { //向左查找
return binarySearch2(arr, left, mid-1, findVal);
}else
{
//找到時,不要急着加入集合中.而是繼續查找重複元素
ArrayList<Integer> reIndexlist=new ArrayList<Integer>();
int temp=mid-1;
while(true) //向左查找重複元素
{
if (temp<0||arr[temp]!=findVal) {
break;
}
reIndexlist.add(temp);
temp-=1;
}
reIndexlist.add(mid); //加入找到的第一個元素
temp=mid+1;
while(true) //向右查找重複元素
{
if (temp>arr.length-1||arr[temp]!=findVal) {
break;
}
reIndexlist.add(temp);
temp+=1;
}
return reIndexlist;
}
}
}