二分查詢
給一組有序的陣列,要求找出其中乙個元素,並輸出此元素的位置,下面用二分查詢
來做,二分查詢的效率極高。舉個例子,若讓你猜乙個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語言 二分查詢
二分查詢有序陣列中查詢具體某個數 條件 陣列為有序陣列 公升序或降序 查詢的思想 在有序陣列中查詢具體某個數,如果有,輸出該數所對應的下標 如果沒有,輸出未找到.具體思想 若為公升序排列的陣列,取陣列中間元素與待查詢的數比較,若待查詢的數小於中間元素,則在陣列左半部分查詢 若待查詢的數大於中間元素,...