Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Домашнее задание№1.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
98.3 Кб
Скачать

3. Обменная поразрядная сортировка

Данный метод использует двоичное представление ключей. Файл сортируется последовательно по битам двоичного представления ключей, начиная со старшего. Ключи, имеющие значение данного бита, равное нулю, ставятся в левую половину файла, а ключи со значением бита 1 - в правую. Ниже приведена схема алгоритма поразрядной сортировки.

Функция b(ключ) возвращает значение бита с номером b аргумента, m - максимальное количество значащих битов в ключах.

l=1; r=N; b=1;

╔══>═╬══<══════════════════════════════════════════════╗

║ ║ ╔═══════════<═══════════════════════════╬═══════════════╗

║ ║ ┌──╫─────────────────────────────────────┐ ║ ║

║ ║ │ if(стек пуст) Конец; │ ║ ║

║ if(l=r) │ ┌──────────────────────────────┐ │ ║ ║

║ │ else │l=r+1; │ │ ║ ║

║ │ │Взять из стека элемент (r',b')╞>═╪═╝ ║

║ │ │r=r'; b=b'; │ │ ║

║ │ └──────────────────────────────┘ │ ║

║ └────────────────────────────────────────┘ ║

║ i=l; j=r; ║

║ ┌────────────────────────────────────────┐ ║

║ ╔═if(b(K[i])=1)│j=j-1;══════════<═══════════╗ │ ║

║ ║ │ ┌──────────────────╫─────────┐ │ ║

║ ║ │if(i<=j) │ if(b(K[j+1])=1) ═╝ │ │ ║

║ ║ │ │ ┌───────────────┐ │ │ ║

║ ║ │ │ else │ K[i]<->K[j+1] ╞>═╗ │ │ ║

║ ║ │ │ └───────────────┘ ║ │ │ ║

║ ║ │else ═>╗ └─────────────────────────╫──┘ │ ║

║ ║ └───────╫───────────────────────────╫────┘ ║

║ ╚════<═════════════╗ ║ ║ ║

║ ┌──────────╫───╫───────────────────────────╨────────────┐ ║

║ else │ i=i+1; ║ ║ │ ║

║ │ if(i<=j)═╝ ║ │ ║

║ │ ┌───────╨─────────────────────────────────────┐ │ ║

║ │ │ b=b+1; │ │ ║

║ │ else │ if(b>m) ═>══════════════════════════════════╪══╪════╝

╚════<════╪══════╪══════════════════╦═<═╦══════════════<═╗ │ │

│ │ if(j<l или j=r)═>╝ ║ ║ │ │

│ │ ┌────────────── ╫────────────────╫───┐ │ │

│ │ else │if(j=l) l=l+1═>╝ ║ │ │ │

│ │ │ ┌────────────────────────┐ ║ │ │ │

│ │ │else │ Поместить в стек (r,b);╞>╝ │ │ │

│ │ │ │ r=j; │ │ │ │

│ │ │ └────────────────────────┘ │ │ │

│ │ └────────────────────────────────────┘ │ │

│ └─────────────────────────────────────────────┘ │

└───────────────────────────────────────────────────────┘

Пример использования этого алгоритма приведен ниже. Значения элементов файла даны в 16-ричной системе счисления. Квадратные скобки [] использованы для обозначения подфайлов с одинаковым значением бита b (b=1 соответствует старшему биту ).

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 │l r b

───────────────────────────────────────────────────────────────┼───────

┌─ ─┐│

│1F7 57 200 3D 38C AA 381 113 28D 1AA 9A 1FD 264 2A5 2FD 2BF││ 1 16 1

│ ─┐┌─ ││

│1F7 57 1FD 3D 9A AA 1AA 113││28D 381 38C 200 264 2A5 2FD 2BF││ 1 8 2

│ ─┐┌─ ││ ││

│AA 57 9A 3D││1FD 1F7 1AA 113││28D 381 38C 200 264 2A5 2FD 2BF││ 1 4 3

│ ─┐┌─ ││ ││ ││

│3D 57││9A AA││1FD 1F7 1AA 113││28D 381 38C 200 264 2A5 2FD 2BF││ 1 2 4

└─ ─┘│ ││ ││ ││

│ ││ ││ ││

3D 57 │9A AA││1FD 1F7 1AA 113││28D 381 38C 200 264 2A5 2FD 2BF││ 3 4 4

│ ││ ││ ││

3D 57 │9A AA││1FD 1F7 1AA 113││28D 381 38C 200 264 2A5 2FD 2BF││ 3 4 5

└─ ─┘│ ││ ││

│ ││ ││

3D 57 9A AA│1FD 1F7 1AA 113││28D 381 38C 200 264 2A5 2FD 2BF││ 5 8 3

└─ ┌─ ││ ││

3D 57 9A AA 113│1F7 1AA 1FD││28D 381 38C 200 264 2A5 2FD 2BF││ 6 8 4

└─ ┌─ ││ ││

3D 57 9A AA 113 1AA│1F7 1FD││28D 381 38C 200 264 2A5 2FD 2BF││ 7 8 5

│ ││ ││

3D 57 9A AA 113 1AA│1F7 1FD││28D 381 38C 200 264 2A5 2FD 2BF││ 7 8 6

│ ││ ││

3D 57 9A AA 113 1AA│1F7 1FD││28D 381 38C 200 264 2A5 2FD 2BF││ 7 8 7

└─ ─┘└─ ││

┌─ ││

3D 57 9A AA 113 1AA 1F7 1FD │28D 381 38C 200 264 2A5 2FD 2BF││ 9 16 2

│ ─┐┌─ ││

3D 57 9A AA 113 1AA 1F7 1FD │28D 2BF 2FD 200 264 2A5 ││2FD 381││ 9 14 3

│ ─┐┌─ ││ ││

3D 57 9A AA 113 1AA 1F7 1FD │264 200││2FD 2BF 28D 2A5││2FD 381││ 9 10 4

└─ ─┘└─ ──┘└─ ─┘│

┌─ ─┐┌─ ─┐│

3D 57 9A AA 113 1AA 1F7 1FD 200 264│2A5 2BF 28D 2A5││38C 381││11 14 4

│ ││ ││

│ ─┐┌─ ││ ││

3D 57 9A AA 113 1AA 1F7 1FD 200 264│28D 2BF 28D││2FD││38C 381││11 13 5

└─ ││ ││ ││

┌─ ││ ││ ││

3D 57 9A AA 113 1AA 1F7 1FD 200 264 28D│2BF 2A5││2FD││38C 381││12 13 6

└─ ─┘└─ ─┘└─ ││

┌─ ││

3D 57 9A AA 113 1AA 1F7 1FD 200 264 28D 2A5 2BF 2FD │38C 381││15 16 3

│ ││

3D 57 9A AA 113 1AA 1F7 1FD 200 264 28D 2A5 2BF 2FD │38C 381││15 16 4

│ ││

3D 57 9A AA 113 1AA 1F7 1FD 200 264 28D 2A5 2BF 2FD │38C 381││15 16 5

│ ││

3D 57 9A AA 113 1AA 1F7 1FD 200 264 28D 2A5 2BF 2FD │38C 381││15 16 6

│ ││

3D 57 9A AA 113 1AA 1F7 1FD 200 264 28D 2A5 2BF 2FD │38C 381││15 16 7

└─ ─┘│

3D 57 9A AA 113 1AA 1F7 1FD 200 264 28D 2A5 2BF 2FD 38C 381 │17 - -