二分查找是一种高效的查找方法,但只适用于顺序表。
假定有一个升序数组,二分查找主要思路:先把待找x与数组中间的元素y比较,相等则查找成功,否则将数组对半分为左右两个子表,若x<y,则把x与左子表中间元素比较,若相等则查找成功;若x>y,则把x与左子表中间元素比较,若相等则查找成功;否则按上述方法继续查找,直至查找到元素,或者超出边界
二分查找:
int binarySearch(int iEle, PT_Array ptArray)
{
int iLeft, iRight, iMid, iLoc = -1;
iLeft = 1;
iRight = ptArray->iTop;
iMid = (iLeft + iRight) / 2;
while (iLeft <= iRight)
{
if (ptArray->aiArray[iMid] == iEle)
{
iLoc = iMid;
printf("Find the %d in index %d\r\n", iEle, iLoc);
break;
}
else if (ptArray->aiArray[iMid] > iEle)
{
iRight = iMid - 1;
iMid = (iLeft + iRight) / 2;
}
else
{
iLeft = iMid + 1;
iMid = (iLeft + iRight) / 2;
}
}
if (iLeft > iRight)
printf("Not found\r\n");
return iLoc;
}