用C語言寫二分查詢,分塊查詢

2021-09-26 13:54:23 字數 1612 閱讀 5190

二分查詢

給一組有序的陣列,要求找出其中乙個元素,並輸出此元素的位置,下面用二分查詢

來做,二分查詢的效率極高。舉個例子,若讓你猜乙個1—100之間的數,首先你肯定

會猜50,因為這樣折半的猜才會使猜的次數最少。二分查詢的思想也是同樣,先找到

最中間的元素,跟要找的元素比較,這樣就排除了一半的元素,然後將包含要找的元

素的那一半數再分成兩半,直到找到需要的那個數,這種方法的缺點是只能用於一組

有順序的數,無序則不可以用。

//二分查詢

int binary_search(int key, int a, int sz)

if (left <= right)

else

return -1;//沒找到

}int main()

;//有序的一組數

int sz = sizeof(a) / sizeof(a[0]);

int ret = 0;

ret = binary_search(key, a, sz);

if (ret >= 0)

else

printf("找不到");

return 0;

}

分塊查詢,也叫索引順序查詢

將待查的元素均勻的分成塊,塊間按大小排序,塊內不排序,所以要建立乙個塊的最

大(或最小)關鍵字表,稱為索引表。

索引儲存結構

儲存節點資訊時,建立索引表,索引表含有若干個索引項,索引項的一般形式:(關字,

位址),關鍵字表示表示乙個節點,位址是指向節點的資訊,可以通過索引的方法來

操作相應位置的資料。

例如

採用分塊查詢法再有序表中查詢乙個關鍵數。總元素個數為15個,將給出的15個數按

關鍵字大小分成了3塊,這15個數的排列是乙個有序序列,也可以給出無序序列,但必

須滿足分在第一塊中任意數都小於第二塊中的所有數,第二塊中的所有數都小於第三塊

中的所有數。當要查詢關鍵字為key的元素時,先用順序查詢在已建好的索引表中查出

key所在的塊中,再在對應的塊中順序查詢key,若key存在,則輸出其相應位置否則輸

出提示資訊。

//分塊查詢

struct index //定義塊的結構

index_table[4]; //定義結構體陣列

//自定義函式實現分塊查詢

int block_search(int key, int a)

int main()

; for (i = 1; i <= 3; i++)

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

scanf("%d", &key);

k = block_search(key, a);

if (k != 0)

printf("查詢成功,其位置是%d\n",k);

else

printf("查詢失敗\n");

}

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

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好,占用系統記憶體較少 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位...

查詢演算法 順序查詢 二分查詢 分塊查詢

近期總結了各大排序演算法的原理 並對其進行了實現,想著一併把查詢演算法總結了,今天就著手開始總結查詢演算法。關鍵字與陣列中的數順序比較,時間複雜度o n void cgradationdlg onbutfind else if n 10 updatedata false 二分查詢又稱折半查詢,優點是...

C語言 二分查詢

二分查詢有序陣列中查詢具體某個數 條件 陣列為有序陣列 公升序或降序 查詢的思想 在有序陣列中查詢具體某個數,如果有,輸出該數所對應的下標 如果沒有,輸出未找到.具體思想 若為公升序排列的陣列,取陣列中間元素與待查詢的數比較,若待查詢的數小於中間元素,則在陣列左半部分查詢 若待查詢的數大於中間元素,...