00 або більше клітинок. p align="justify"> Можна прискорити процес пошуку, відсортувавши зв'язані списки. Це дозволяє припинити пошук, якщо програма знаходить елемент зі значенням більше шуканого. У середньому буде потрібно перевірити тільки половину списку, щоб знайти елемент або визначити, що його немає в списку. br/>
cell: PChainCell;
begin
// Визначення ланцюга, що містить значення.
cell: = ListTops * [value mod NumChains]. NextCell;
// Пошук елемента.
while (cellonil) do (се11Л.Value> = value) then break;: = се! 1Л.NextCell;; (cellonil) then
if (cell.Value = value) then
begin
// Які-небудь дії з осередком.
,
end;;
Використання упорядкованих списків прискорює пошук, але не усуває саму проблему переповнення таблиць. Кращим рішенням буде створення хеш-таблиці більшого розміру і повторне хешування елементів у новій таблиці так, щоб зв'язані списки в ній мали менший розмір. Але ця операція може зайняти багато часу, особливо в тому випадку, якщо списки збережені на жорсткому диску або будь-якому іншому повільному пристрої, а не в оперативній пам'яті. br/>
Бінарний (двійковий) пошук
Нехай є N записів у вигляді лінійного масиву, упорядкованих по ключах так, що k 1 < k 2 <... N (k i = a [i]. key). Надалі будемо замість a [i]. Key використовувати позначення k i і замість x - key.
Визначити запис, що має ключ key, можна за допомогою послідовного пошуку, але якщо врахувати специфіку масиву, то пошук можна істотно скоротити. Для цього звернемося до середини масиву і визначимо ключ