-
Notifications
You must be signed in to change notification settings - Fork 0
/
ordEREWoddEvenMergeproc.py
71 lines (51 loc) · 1.54 KB
/
ordEREWoddEvenMergeproc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# practica 6.2: Ordenamiento EREW oddEvenMerge (procesos)
# Autor: Jorge de Jesús Jiménez Servín, Jose Daniel Perez Mejia, Kennet Kael Mendoza Pliego
import multiprocessing
def proc1(L, i, odd, even):
L[2 * i] = odd[i]
L[2 * i + 1] = even[i]
def proc2(L, i):
if L[2 * i + 1] < L[2 * i]:
L[2 * i + 1], L[2 * i] = L[2 * i], L[2 * i + 1]
def oddEvenSplit(L):
n = len(L)
aux = int(n / 2)
L1 = L[0:aux]
L2 = L[aux:n]
return L1, L2
def oddEvenMergePRAM(L):
n = len(L)
if n == 2:
if L[0] > L[1]:
L[0], L[1] = L[1], L[0]
else:
odd, even = oddEvenSplit(L)
oddEvenMergePRAM(odd)
oddEvenMergePRAM(even)
return odd, even
def main():
L = multiprocessing.Array(
'i', [16, 22, 35, 40, 55, 66, 70, 85, 15, 18, 23, 53, 60, 69, 72, 78])
print(f'\nNumeros: {L[:]}\n')
odd, even = oddEvenMergePRAM(L)
processes = []
for i in range(0, int(len(L) / 2)):
p1 = multiprocessing.Process(target=proc1, args=(L, i, even, odd))
p1.start()
processes.append(p1)
for p in processes:
p.join()
processes = []
for i in range(0, int(len(L) / 2)):
p2 = multiprocessing.Process(target=proc2, args=(L, i))
p2.start()
processes.append(p2)
for p in processes:
p.join()
print(oddEvenMergePRAM(even))
print(oddEvenMergePRAM(odd))
print(oddEvenSplit(L))
print(oddEvenMergePRAM(L))
print('\n Numeros ordenados: \n', L[:], '\n')
if __name__ == '__main__':
main()