二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好,
占用系統記憶體較少;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
二分查詢的基本思想是將
n個元素分成大致相等的兩部分,取
a[n/2]與x
做比較,如果
x=a[n/2],
則找到x,
演算法中止;如果
x則只要在陣列ax,
如果x>a[n/2],
則只要在陣列
a的右半部搜尋x。
總共有n個元素,漸漸跟下去就是
n,n/2,n/4,....n/2^k
(接下來操作元素的剩餘個數),其中
k就是迴圈的次數。
當陣列中的元素已經排列有序時,可以採用折半查詢(二分查詢)法查詢乙個元素。下面的函式bisearch(int r,int low,int high,int key)用非遞迴方式在陣列r中進行二分查詢,函式bisearch_rec(int r,int low,int high,int key)採用遞迴方式在陣列r中進行二分查詢,函式的返回值都為所找到元素的下標;若找不到,則返回-1。
int bisearch(int r,int low,int high,int key)
//r[low..high] 中的元素按非遞減順序排列
//用二分查詢法在陣列r中查詢與key相同的元素
//若找到則返回該元素在陣列r的下標,否則返回-1
/*while*/
return -1;
}/*bisearch*/
int bisearch_rec(int r,int low,int high,int key)
//r[low..high]中的元素按非遞減順序排列
//用二分查詢法在陣列r中查詢與key相同的元素
//若找到則返回該元素在陣列r的下標,否則返回-1
/*if*/
return -1;
}/*bisearch_rec*/
C語言 折半查詢(二分查詢)演算法
什麼是折半查詢 當我們在一堆有序陣列中間查詢乙個數的時候,先將中間的數與查詢數進行比較。如果中間數大於我們要查詢的數,則在中間左半邊進行查詢 同樣的,如果中間數小於我們要查詢的數,則在中間往右半邊再次進行查詢。重複以上的過程,直到滿足,如果不滿足,則查詢失敗。條件 元素必須按照大小有序排列。那我們實...
C語言折半查詢(二分查詢)
定義 對使用者輸入的數是否在已經按順序定義好的一組數上進行查詢 思想 定義好的一組數必須按順序排序,一般從小到大排序 將一組數分為兩個部分 low指第乙個數,mid指中間乙個數,high指第最後乙個數 把查詢數n與mid比較 如果n mid,說明在mid右側,low的位置發生改變,除去當時low本身...
c語言 二分查詢(折半查詢)
a 你的新鞋子好炫酷,多少錢買的呀?b 在100 300之間,你猜一下咯,每次我只告訴你猜大了還是猜小了,直到你猜對為止,看看你能不能很快猜出來。a 小夥伴在生活中有沒有和好朋友玩過類似的遊戲呢,不知道接下來你會選擇何種方式去猜呢?如果從100開始乙個乙個往後試,就顯得稍稍有點無腦了,每次猜測的時候...