Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ТЭИС.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
11.22 Mб
Скачать

7.2.6.Сортировка слиянием

Если данные хранятся в файле и объем данных превышает размер оперативной памяти, то для сортировки таких данных можно воспользоваться сортировкой слиянием. Основная идея сортировки слиянием проиллюстрирована на рис.7.14. В данном случае исходный файл F0 разбивается на две части, которые могут быть помещены в оперативную память (в общем случае число таких частей может быть больше двух). Далее обе части сортируются любым из методов внутренней сортировки и записываются на диск. В данном примере запись осуществляется в рабочие файлы F1 и F2. Однако можно было осуществить запись отсортированных частей файла на место исходного файла. Далее отсортированные части файла сливаются в одну.

Слияние двух отсортированных файлов в один осуществляется следующим образом:

  1. В качестве текущих элементов первого и второго файла принять первые элементы в этих файлах. Результирующий файл пуст.

  2. Если значение текущего элемента первого файла больше значения текущего элемента второго файла, то в результирующий файл записать значение текущего элемента второго файла и в качестве текущего элемента второго файла принять следующий элемент в этом файле

  3. Если значение текущего элемента первого файла меньше или равно значению текущего элемента второго файла, то в результирующий файл записать значение текущего элемента первого файла и в качестве текущего элемента первого файла принять следующий элемент в этом файле

  4. Если достигнут конец первого файла, то все элементы второго файла переписать в результирующий файл.

  5. Если достигнут конец второго файла, то все элементы первого файла переписать в результирующий файл.

Этапы слияния исходных файлов F1 и F2 в результирующий файл F3 (см. рис.7.14) представлены в табл.7.1.

Таблица 7.1

Этапы слияния файлов F1 и F2

Итерация

Номер текущей элемента файла

Элемент,

записываемый

в файл F3

F1

F2

i

j

1

1

1

F31=F11=1

2

2

1

F32=F12=2

3

3

1

F33=F21=3

4

3

2

F34=F22=4

5

3

3

F35=F13=5

6

4

3

F36=F14=7

7

5

3

F37=F23=8

8

5

4

F38=F24=8

9

5

5

F39=F25=10

10

5

6

F310=F15=11

11

6

6

F311=F16=12

12

7

6

F312=F26=15

13

7

7

F313=F17=16

14

8

7

F314=F27=17

15

8

*

F315=F18=20