用c語言折半查詢演算法(二分查詢)

2021-08-30 21:59:43 字數 1163 閱讀 6324

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好,

占用系統記憶體較少;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

二分查詢的基本思想是將

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開始乙個乙個往後試,就顯得稍稍有點無腦了,每次猜測的時候...