c語言折半查詢法,c語言的折半查詢法

2021-12-19 14:27:52 字數 4435 閱讀 7805

1樓:劉珠賀初陽

如果是升序排列的陣列

可以像你原來那麼寫

但是你的陣列是降序的,所以需要修改一下

if(k==a[mid])

return

mid;

else

if(k>a[mid])

high=mid-1;

else

low=mid+1;

2樓:星月小木木

int binary_search(int * data,int len,int target)

return -1;

}int main()

;int i=binary_search(a,10,5);

if(i==-1)

printf("not foun!\n");

else

printf("foun %d at %d\n",a[i],i);

return 0;}

3樓:

#include

void main()

if(k!=i)

}printf("the arranged number is:");

for(i=0;i<20;i++)

printf("%4d",a[i]);

printf("\nplease input one number to search for:");

scanf("%d",&b);

while (d<=e)

else if(b>a[c]) d+=1;

else e-=1;

}//printf("not found!\n"); //找不到得出 都會顯示 去掉}

c語言折半查詢法

4樓:風若遠去何人留

折半查詢法是演算法一種,可以被任何計算機語言使用。用c語言自然也可以實現。

1、定義:

在電腦科學中,折半搜尋(英語:half-interval search),也稱二分搜尋(英語:binary search)、對數搜尋(英語:

logarithmic search),是一種在有序陣列中查詢某一特定元素的搜尋演算法。

搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半。

2、查詢規則:

折半查詢法是效率較高的一種查詢方法。假設有已經按照從小到大的順序排列好的五個整數a0~a4,要查詢的數是x,其基本思想是: 設查詢資料的範圍下限為l=0,上限為h=4,求中點m=(l+h)/2,用x與中點元素am比較,若x等於am,即找到,停止查詢;否則,若x大於am,替換下限l=m+1,到下半段繼續查詢;若x小於am,換上限h=m-1,到上半段繼續查詢;如此重複前面的過程直到找到或者l>h為止。

如果l>h,說明沒有此數,列印找不到資訊,程式結束。

int bin_search(int a,int n,int key)

}return -1;//未找到,返回-1.}

5樓:伊·梵

if (x=a[i]) /* 應該是x==a[i]吧 */用遞迴實現,程式會很好理解

int f(int a,int x, int start,int end)

修改如下:

#include

void main()

else if (x>a[i]) end = i-1;

else start=i+1; } }

6樓:

你的演算法有問題的,只有15個數你就模擬下計算機算下就知道。

另外找到x的時候你也沒有break退出迴圈。

7樓:匿名使用者

首先,應當宣告兩個變數來記錄這般查詢空間的範圍,這裡我們定義begin和end;其次判斷語句if(x=a[i])中x=a[i]是賦值語句,"=="是判斷相等運算子,應該為if(x == a[i]);最後,主函式為int型,應最後返回0表示執行成功,即在程式結尾家return 0;

以下是我在你**基礎上略加修改,已通過執行併成功。

#include

int main()

else

if (x>a[i])

end = i - 1;

else

begin = i + 1;

}return 0;}

8樓:

#include

#include

int cmp(const void * a,const void * b)

void main()

else if (x>a[i])

start = i+1;

else

end=i-1; } }

c語言的折半查詢法

9樓:匿名使用者

你的陣列的索引為0-14

所以你可以設兩個變數

這兩個變數a,b是用來限制你要的數的範圍的一開始a=0 b=14

接著取索引為int((a+b)/2 )的元素與你輸入的比較如果比輸入的小的話那麼設a=int(a+b)/2 )接著繼續取索引為int((a+b)/2 )的元素與你輸入的比較如果比輸入的大的話那麼設b=int(a+b)/2 )繼續找下去 如果相等的話就列印並break

不然一直到a=b退出迴圈

10樓:浮駒弭寄

#include

intmain()

if(a[mid]==ch)printf("第%d個字元就是%c\n",mid+1,ch);

if(bot>top)printf("該字元不存在a中\n");

return0;}

11樓:經寧機湛藍

兩個錯誤!

執行成功的**:

#include

#include

main()

for(i=0;i<=9;i++)

if(flag)

puts(name[mid]);

else

if(flag==0)

printf("error");

}**有完善的地方,我只是改了你兩個錯誤。

12樓:匿名使用者

折半,故名思意,把拍好的陣列不停地分成一半查詢例如你說有15個數

(1)取中間一個數a[6](要是陣列是偶數,就取左邊一個)和目標數比較

(2)要是比較結果為目標數大(表明要找的數就在a[7]~a[14]裡或沒有),就在a[7]~a[14]之間取中間數a[10],和目標數比較

(3)不停地比,直到找到目標數,返回下標。

13樓:匿名使用者

既然按順序排了就很簡單了,以這道題為例。先取出第7個數,比較大小。if 判斷 如果大 與(7+1)/2 第4個數比 如果小 與(7+15)/2 第11 個數比相當於判斷一次少一半的可能性。

依此類推。。。直到找出那個數或是兩個相鄰的數之間就停止了。

14樓:想愛你而又不能

首先陣列必須是按順序排列

用a[1]...a[10]說吧

先和a[5]做比較,要是答案比a[5]大的話,那它必定在a[6]...a[10]之間,

然後在和a[8]比,這樣下去。。。每次都是取中間的那個比

15樓:

所謂折半查詢,是基於你的陣列已經是順序排好的。

就如你說的「15個數由大到小的順序存放在一個陣列中」,我們記為array[15]

第一次的比較就是讓輸入的數num與15個數的中間的那個數比,也就是array[7].

如果num小於array[7],

第二次比較就是比較num與array[8]至array[14]的中間數(即array[11]),否則就比較array[0]至array[6]的中間數(即array[3]),依次類推

16樓:析壤

折半查詢

1 。陣列必須是按循序排列的

2。顧名思義再就折半查詢

c語言中的折半查詢法是什麼

17樓:秀乞群群

折半查詢法也稱為二分查詢法,它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用o(log n)完成搜尋任務。

例如排序後的資料是1 5 12 35 64 78 89 123 456

你要查詢12,首先用12跟上面排好順序的9個數中間那個比較(64),12<64,因此你查詢的資料在前半部分,即1 5 12 35 64,再用12跟前半部分中間那個數比較(12),這樣找了2次就找到了

折半查詢的目的是提高查詢的效率!

用c實現折半查詢,如何程式設計實現「折半查詢」的過程

using system public class a console.writeline search intary,9,intary.length 遞迴查詢 ints 包含被查詢數字的陣列 key 要查詢的數字 i 陣列的長度 返回數字在陣列中的位置,沒找到返回 1,int型別public st...

C語言課程設計 查詢演算法設計,C語言 查詢演算法實現

折半查詢 include define n 51 void main void printf 請你輸入一個整數 a 1 需保證遞增有序 scanf d a 1 i 2 while i n 輸入從小到大的表列 輸出表列 printf n輸出表列 n for i 1 i n i printf n pri...

c語言插入排序法,C語言插入排序法

插入排序 insertion sort 如果需要對一個小型陣列進行升序排列,那麼可以選用插入排序,插入排序可以用打牌時對摸起的牌根據牌的點數來對其進行插入排列來描述。可以把左手中的牌比做已經摸起的牌,即已經被排列好的牌,左手可以容納的牌數的空間可以假想為和要摸的牌的總數相同 而在桌子上的那部分沒摸的...