- •Сортировка слиянием (метод простого двухпутевого слияния)
- •Таблица на каждом шаге сортировки- совокупность равных упорядоченных групп, которые попарно сливаются, образуя
- •Алгоритм сортировки таблицы методом простого двухпутевого слияния
- •Вспомогательный алгоритм
- •Procedure sl(T, i1,k1,i2,k2);
- •Локальные переменные алгоритма сортировки:
- •Алгоритмы поиска в таблицах
- •Для неупорядоченных таблиц- метод линейного поиска (последовательный перебор всех записей)
- •Для упорядоченных таблиц- метод дихотомического
- •Например, ищем 32:
- •Алгоритм дихотомического поиска
- •Локальные переменные:
- •Динамические структуры данных
- •Распределение памяти при выполнении программы:
- •Ограничения на использование статической памяти:
- •Доступ к динамической памяти
Локальные переменные алгоритма сортировки:
h – шаг слияния,
i1, i2 –индексы начала сливаемых групп.
11
h:=1; while h<n Begin
i:=1;
while i+2*h<n begin
sl (T, i, h, i+h,h); i:=i+2*h;
end;
if (i+2*h>n) and (i+h<n) sl (T, i, h, i+h,n-(i+h));
h:=h*2;
End;
Алгоритмы поиска в таблицах
13
Для неупорядоченных таблиц- метод линейного поиска (последовательный перебор всех записей)
14
Для упорядоченных таблиц- метод дихотомического
(бинарного, двоичного,
логарифмического)
поиска
15
Например, ищем 32: |
|
|
|
|
|
|
|
|
|
|
|
||||||
Ng=1 (нижняя граница) |
|
|
|
Vg=14 (верхняя граница) |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
5 |
7 |
8 |
11 |
15 |
17 |
19 |
22 |
23 |
27 |
29 |
32 |
35 |
|
i=7 (середина) |
17<32, ng:=i+1 |
|
|
2 |
5 |
7 |
8 |
11 |
15 |
17 |
19 |
22 |
23 |
27 |
29 |
32 |
35 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=11 27<32, ng:=i+1
2 |
5 |
7 |
8 |
11 |
15 |
17 |
19 |
22 |
23 |
27 |
29 |
32 |
35 |
i=12
32=32
Алгоритм дихотомического поиска
Параметры:
T- таблица,
N – количество записей в таблице, key – ключ искомой записи,
K – результат поиска (номер найденной
записи). |
17 |
Локальные переменные:
Ng – нижняя граница поиска, Vg – верхняя граница поиска, I – номер текущей записи,
fl: boolean – признак успешного поиска.
18
Ng:=1;
Vg:=n;
fl:=false;
k:=0;
while (ng<=vg) and not fl do begin
I:=(ng+vg) div 2;
If key<T[i].kl then |
vg:=i-1 |
else if key>T[i].kl |
then ng:=i+1 |
else |
|
begin |
|
fl:=true;
k:=i
end End {while}