Прикреплённый файл «2012-12-14.joinsort.py»
Загрузка 1 #!/usr/bin/env python
2 # coding: utf
3 '''
4 Сортировка файла методом слияния
5 '''
6
7 import os
8
9 def fsplit(File):
10 '''Поделить файл File на несколько отсортированных файлов File0…FileN
11 (хотя бы по одной строке в файле).
12 Возвращает количество файлов'''
13 f,o,n=open(File,"r"),"",0
14 tf=open(File+str(n),"w")
15 for s in f:
16 tf.write(o)
17 if o>s:
18 tf.close()
19 n+=1
20 tf=open(File+str(n),"w")
21 o=s
22 tf.write(o)
23 tf.close()
24 return n+1
25
26 def fjoin(F1, F2, F3):
27 '''Слить два упорядоченных файла F1 и F2 в файл F3'''
28 F=F3+"_" # Временный файл
29 f1, f2, f = open(F1,"r"), open(F2,"r"), open(F,"w")
30 s1, s2 = f1.readline(), f2.readline()
31 while s1 or s2: # Какой-то из файлов непуст
32 if s1 and (not s2 or s1 <= s2):
33 f.write(s1)
34 s1=f1.readline()
35 else:
36 f.write(s2)
37 s2=f2.readline()
38 f1.close(),f2.close(),f.close()
39 os.rename(F,F3)
40
41 def joinsort(File):
42 '''Сортировка файла слиянием с хранением промежуточных файлов'''
43 n=N=fsplit(File)
44 while n>1:
45 # Если файлов нечётное число, заведём ему пустую пару
46 if n%2:
47 open(File+str(n),"w").close()
48 n+=1
49 # Сольём файлы попарно
50 for i in xrange(0,n,2):
51 fjoin(File+str(i), File+str(i+1), File+str(i/2))
52 n/=2
53 os.rename(File+"0", File)
54 # Удалим все временные файлы
55 for i in xrange(1,N):
56 os.unlink(File+str(i))
57
58 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]]
Вам нельзя прикреплять файлы к этой странице.