我不解釋我給了java代碼,如果你想你可以改進它。
public class Test {
public static int binSearch(int array[], int key, int left, int right,boolean lb)
{
int mid = left + (right-left)/2;
if (key < array[mid])
return binSearch(array, key, left, mid-1,lb);
else if (key > array[mid])
return binSearch(array, key, mid+1, right,lb);
else if (key == array[mid]){
if(!lb){
if(key==array[mid+1]){
int ctr=mid+1;
while(key==array[++ctr]);
return ctr--;
}
else
return mid;
}
else{
if(key==array[mid-1]){
int ctr=mid-1;
while(key==array[--ctr]);
return ctr++;
}
else
return mid;
}
}
return -0; // Not Found
}
public static void main(String[] args) {
int a[]={1,2,4,4,5,8,12,15,15,23,54};
int start=binSearch(a, 4, 0, a.length,true);
int end=binSearch(a, 15, 0, a.length,false);
System.out.println(end-start+1);// number are include
}
}
您可以搜索起始元素的索引 - 0.5,並查找結束元素的索引+ 0.5。結果是[開始,結束 - 1] – SJuan76 2013-03-08 10:53:59
但這些是整數 – John 2013-03-08 10:56:57
但是,在比較float或double與整數時沒有問題 – uba 2013-03-08 10:58:18