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

2022-02-21 12:49:56 字數 4300 閱讀 8513

1樓:匿名使用者

#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");

printf("請你輸入要查詢的數:");

scanf("%d",&num);

flag=1; //假設輸入的數在表列中

top=n;

bottom=1;

mid=(top+bottom)/2;

while(flag)

else if(a[mid]

}if(loc==-1)

printf("折半查詢結束,按任意鍵退出:\n");}

2樓:匿名使用者

com/view/549603.html演算法思想:將數列按有序化(遞增或遞減)排列,查詢過程中採用跳躍式方式查詢,即先以有序數列的中點位置為比較物件,如果要找的元素值小於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。

通過一次比較,將查詢區間縮小一半。折半查詢是一種高效的查詢方法。它可以明顯減少比較次數,提高查詢效率。

但是,折半查詢的先決條件是查詢表中的資料元素必須有序。演算法步驟描述:step1 首先確定整個查詢區間的中間位置mid = ( left + right )/ 2step2 用待查關鍵字值與中間位置的關鍵字值進行比較;若相等,則查詢成功若大於,則在後(右)半個區域繼續進行折半查詢若小於,則在前(左)半個區域繼續進行折半查詢 step3 對確定的縮小區域再按折半公式,重複上述步驟。

最後,得到結果:要麼查詢成功, 要麼查詢失敗。折半查詢的儲存結構採用一維陣列存放。

折半查詢演算法舉例 對給定數列(有序),按折半查詢演算法,查詢關鍵字值為30的資料元素。折半查詢的演算法討論:優點:

asl≤log2n,即每經過一次比較,查詢範圍就縮小一半。經log2n 次計較就可以完成查詢過程。缺點:

因要求有序,所以要求查詢數列必須有序,而對所有資料元素按大小排序是非常費時的操作。另外,順序儲存結構的插入、刪除操作不便利。考慮:

能否通過一次比較拋棄更多的部分(即經過一次比較,使查詢範圍縮得更小),以達到提高效率的目的。……?可以考慮把兩種方法(順序查詢和折半查詢)結合起來,即取順序查詢簡單和折半查詢高效之所長,來達到提高效率的目的?

實際上這就是分塊查詢的演算法思想。例如:[問題分析] 由於資料按公升序排列,故用折半查詢最快捷.

program binsearch;const max=10;var num:array[1..max] of integer;i,n:

integer;procedure search(x,a,b:integer);var mid:integer;beginif a=b thenif x=num[a] then writeln('found:

',a) else writeln('number not found')else beginmid:=(a+b) div 2;if x>num[mid] then search(x,mid,b);if xncode) else if(nlist[jcur] < ncode) else if(nlist[jcur] == ncode) jcur = (jmin + jmax)/2;} while(jmin < jmax);return nindex;}二分查詢的效能說明雖然二分查詢的效率高,但是要將表按關鍵字排序。而排序本身是一種很費時的運算。

既使採用高效率的排序方法也要花費 o(n lg n) 的時間。 二分查詢只適用順序儲存結構。為保持表的有序性,在順序結構裡插入和刪除都必須移動大量的結點。

因此,二分查詢特別適用於那種一經建立就很少改動、而又經常需要查詢的線性表。 對那些查詢少而又經常需要改動的線性表,可採用鍊錶作儲存結構,進行順序查詢。鍊錶上無法實現二分查詢二分查詢的c#實現**:

using system;using system.collections.generic;using system.

text;namespace binschdemo else } return -1; //查詢失敗 } static void main(string args) console.write("請輸入乙個你要查詢的數字:"); int find = convert.

toint32(console.readline()); int result = binsch(list, find); console.writeline(result); } }}

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

3樓:秀乞群群

折半查詢法也稱為二分查詢法,它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用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語言中的「折半查詢法」是什麼?

4樓:秀乞群群

折半查詢法也稱為二分查詢法,它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用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語言中的折半查詢法是什麼意思?

5樓:火神獸

把陣列一分為二,從中間開始,分兩條線,向兩邊查詢,在有序陣列中的優勢顯而易見.

6樓:

折半查詢的前提是已經對資料做好了排序,然後再折半查詢例如排序後的資料是1 5 12 35 64 78 89 123 456

你要查詢12,首先用12跟上面排好順序的9個數中間那個比較(64),12<64,因此你查詢的資料在前半部分,即

1 5 12 35 64,再用12跟前半部分中間那個數比較(12),這樣找了2次就找到了

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

7樓:

大家都對!只用在一半的資料中查詢!速度加快!!!

8樓:

二樓說的對,你可以參考一下資料結構和演算法方面的書

9樓:

折半查詢法應該跟二分法類似吧

用c++語言編寫折半查詢演算法的程式

10樓:匿名使用者

#include

#include

using namespace std;

int binary_search(int arr, int len, int val)

return -1;//查詢失敗

}void prtarr(int arr, int len)

int main();

arrlen = sizeof(arr) / sizeof(unsigned int);

prtarr(arr, arrlen);

cout << "輸入要查詢的數:"; cin >> val;

int ret = binary_search(arr, arrlen, val);

if (ret == -1)

cout << "未找到該數" << endl;

else

cout << "該數為陣列的第" << ret << "個元素" << endl;

system("pause");

return 0;

}執行結果:

求c語言編寫程式折半查詢程式

用c語言編寫順序查詢和二分查詢(折半查詢)

順序查詢 在乙個已知無序佇列中找出與給定關鍵字相同的數的具體位置。原理是讓關鍵字與佇列中的數從第乙個開始逐個比較,直到找出與給定關鍵字相同的數為止。複雜度為o n 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。優缺點 折半查詢...

c語言中什麼是數的有效數字,C語言中什麼是乙個數的有效數字?

樓上誤解 樓主問的是c語言 不是數學 這要看你的機器型別和變數型別了 如果定義的是int型 那1234是有 版效數字 權 後面小數都是無效的 如果定義的是float型 那在限定位元組長度內都是有效數字不同機器型別也不一樣 int型有2個位元組 也有4個位元組的 在c語言中,bai乙個數的有效數du字...

什麼是c語言中關於自加自減,什麼是C語言中關於自加自減?

自增分字首自增和字尾自增。無論是什麼,執行自增都有1個 就是原來變數的值會增加1。例如int a 1 a 或int a 1 a 執行後,a 2。而他們的區別就在於整個自增表示式的值不同。如 a 的值是變數a自增以前的值,如上面例子,a 1。而 a 的值則是變數a自增以後的值,即 a 1 1 2。結合...