روش دیگر برای جستجوی عنصری در داخل جدول یا آرایه روش دودویی است. این روش در صورتی امکانپذیر است که عناصر جدول مورد نظر مرتب شده باشد. همچنین، در مقایسه با روش قبلی، از سرعت بیشتری برخوردار است.
در این روش، عنصر اول و عنصر آخر جدول را با دو متغیر مانند L و H نمایش میدهیم و سپس عنصر مورد جستجو را با عنصر وسطی جدول یا m = (L + H) / 2 مقایسه میکنیم. اگر مساوی بود، عنصر مورد جستجو پیدا شده است. در غیر این صورت، چنانچه عنصر مورد جستجو از عنصر وسطی بزرگتر باشد، L را مساوی m+l وگرنه H را مساوی m-1 قرار میدهیم. سپس این عملیات را باز هم تکرار میکنیم؛ یعنی باز هم عنصر وسطی جدول حاصل را بهدست میآوریم و عنصر مورد جستجو را با مقدار آن مقایسه میکنیم. این عمل تا موقعی که شرط L ≤ H برقرار نباشد، ادامه مییابد و پیغامی مبنی بر عدم وجود عنصر مورد جستجو در داخل جدول مورد نظر چاپ میگردد.
v مثال ۷ـ۱۵ مراحل الگوریتم جستجو به روش دودویی برای ده عدد زیر در جدول نمایش داده شده است.
۶۵ , ۱۴۱ , ۱۹۲ , ۲۰۵ , ۲۱۸ , ۳۸۹ , ۴۲۴ , ۵۰۰ , ۵۳۸ , ۵۶۷
v مثال ۷ـ۱۶ تابع زیر در آرایه مرتب شده n عنصری، به روش دودویی عنصر x را جستجو میکند. اگر پیدا شد، اندیس آن و در غیر این صورت مقدار صفر را برمیگرداند.
int BinarySearch (int A[ ] , int n , int x)
{
int middle , L , H ;
L = 0 ;
H = n-1 ;
while (L <= H)
{
middle = (L+H)/2 ;
if (x = = A[middle])
return (middle +1) ;
if (x >A[middle])
L = middle +1 ;
else
H = middle -1 ;
}
return (0) ;
}
v