Прикреплённый файл «joinsort.py»
Загрузка 1 #!/usr/bin/env python
2 # coding: utf
3 '''
4 Сортировка файла методом слияния.
5 Хранение промежуточных результатов в двух файлах
6 '''
7
8 import os, pickle
9
10 def joinsort(F1):
11 '''Слияние двух файлов, состоящих из последовательностей упорядоченных строк,
12 не менее одной строки в каждой. Результат — два новых файла.
13 Первый содержит объеденённые попарно упорядоченные чётные последовательности
14 исходных файлов, второй — нечётные. После чего исходные файлы заменяются новыми.
15 Процесс повторяется, пока второй файл не окажется пустым'''
16
17 F = F1, F1+"2", F1+"A", F1+"B"
18 # Для начала сольём исходный файл с пустым
19 open(F[1],"w").close()
20 n = -1
21 while n:
22 f = open(F[0],"r"), open(F[1],"r"), open(F[2], "w"), open(F[3],"w")
23 s, n = [f[0].readline(), f[1].readline(), ""], 0
24 while s[0] or s[1]:
25 # Не закончилась ли последовательность?
26 if s[2] > max(s[1],s[0]):
27 s[2], n = "", n+1
28 # Строка из какого файла меньшая, но непустая?
29 k = s[1] and (not s[0] or s[0] >= s[1] >= s[2]) and 1 or 0
30 f[2+n%2].write(s[k])
31 s[2], s[k] = s[k], f[k].readline()
32 os.rename(F[2], F[0]); os.rename(F[3], F[1])
33 os.remove(F[1])
34
35 if __name__=="__main__":
36 joinsort("file.data")
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2012-12-26 21:57:22, 0.5 KB) [[attachment:2012-12-14.joinsort.gen.py]]
- [получить | показать] (2012-12-26 21:57:12, 1.8 KB) [[attachment:2012-12-14.joinsort.py]]
- [получить | показать] (2012-12-26 21:56:19, 1.0 KB) [[attachment:2012-12-14.sumfact.py]]
- [получить | показать] (2012-12-26 21:56:47, 0.4 KB) [[attachment:2012-12-14.yomkosti.gen.py]]
- [получить | показать] (2012-12-28 15:10:53, 3.3 KB) [[attachment:2012-12-14.yomkosti.py]]
- [получить | показать] (2013-05-17 14:07:31, 1.7 KB) [[attachment:joinsort.py]]
Вам нельзя прикреплять файлы к этой странице.