** 二分查找又稱折半查找,優(yōu)點是比較次數(shù)少峭判,查找速度快开缎,平均性能好;其缺點是要求待查表為有序表林螃,且插入刪除困難奕删。因此,折半查找方法適用于不經(jīng)常變動而查找頻繁的有序列表疗认。首先完残,假設表中元素是按升序排列伏钠,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等谨设,則查找成功熟掂;否則利用中間位置記錄將表分成前、后兩個子表扎拣,如果中間位置記錄的關鍵字大于查找關鍵字赴肚,則進一步查找前一子表,否則進一步查找后一子表二蓝。重復以上過程誉券,直到找到滿足條件的記錄,使查找成功刊愚,或直到子表不存在為止踊跟,此時查找不成功。 **
C++:
int binSearch(const int *Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
//注釋中為遞歸算法鸥诽,執(zhí)行效率低商玫,不推薦
/*
if(key<Array[mid])
{
return(binSearch(Array,left,mid,key));
}
else if(key>Array[mid])
{
return(binSearch(Array,mid+1,right,key));
}
else
return mid;
*/
while(left<=right)
{
mid=(left+right)/2;
if(key==Array[mid]) return mid;
else if(key<Array[mid]) right=mid-1;
else if(key>Array[mid]) left=mid+1;
}
return -1;
//找不到就返回-1
}
Java:
public static int binarySearch(Integer[] srcArray, int des) {
int low = 0;
int high = srcArray.length - 1;
while ((low <= high) && (low <= srcArray.length - 1)
&& (high <= srcArray.length - 1)) {
int middle = low + ((high - low) >> 1);
if (des == srcArray[middle]) {
return middle;
} else if (des < srcArray[middle]) {
high = middle - 1;
} else {
low = middle + 1;
}
}
return -1;
}