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

2021-08-11 16:59:25 字數 1705 閱讀 4592

近期總結了各大排序演算法的原理 ,並對其進行了實現,想著一併把查詢演算法總結了,今天就著手開始總結查詢演算法。

關鍵字與陣列中的數順序比較,時間複雜度o(n).
void cgradationdlg::onbutfind() 

else

}if (n==10)

updatedata(false);

}

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

void ctwoasunderdlg::binary_search(int key, int a, int n)

else

if (key > a[mid]) //當key大於中間值

else

if (key == a[mid]) //當key等於中間值證明查詢成功

}if (count1 == 0) //判斷是否查詢失敗

}

分塊查詢又稱索引順序查詢,它是順序查詢的一種改進方法。

方法描述:將n個資料元素」按塊有序」劃分為m塊(m ≤ n)。每一塊中的結點不必有序,但塊與塊之間必須」按塊有序」;即第1塊中任一元素的關鍵字都必須小於第2塊中任一元素的關鍵字;而第2塊中任一元素又都必須小於第3塊中的任一元素,……。

操作步驟:

step1 先選取各塊中的最大關鍵字構成乙個索引表;

step2 查詢分兩個部分:先對索引表進行二分查詢或

順序查詢,以確定待查記錄在哪一塊中;

然後,在已確定的塊中用順序法進行查詢。

結構體index

void cblocksearchdlg::onbutfind() 

k = block_search(m_find, num); //呼叫函式進行查詢

if (k != 0)

else

updatedata(false);

}

int cblocksearchdlg::block_search(int key, int a)

if (i > 3) //大於分得的塊數,則返回0

j = index_table[i].start; //j等於塊範圍的起始值

while (j <= index_table[i].end && a[j] != key) //在確定的塊內進行查詢

if (j > index_table[i].end) //如果大於塊範圍的結束值,則說明沒有要查詢的數,j置0

return j;

}

資料結構(順序查詢 二分查詢 分塊查詢)

一 查詢 概念 給定乙個值k,在含有n個記錄的檔案中進行搜尋,尋找乙個關鍵字值等於k的記錄,如找到則輸出該記錄,否則輸出查詢不成功的資訊。二 靜態查詢表 順序查詢 2 折半查詢 折半查詢比順序查詢的效率要高,但它要求查詢表進行順序儲存並且按關鍵字有序排列,因此對錶進行元素的插入和刪除時,需要移動大量...

順序查詢 二分查詢

順序查詢 適用範圍 沒有進行排序的資料序列 缺點 速度非常慢,效率為o n cpp view plain copy 在code上檢視 片派生到我的 片 實現 template type sequencesearch type begin,type end,const type searchvalue...

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

二分查詢的陣列必須是排好序的,順序查詢沒要求,php查詢陣列元素有內建的函式array search和in array 二分查詢法 function binsearch arr,search elseif arr mid search elseif arr mid search return 查詢失...