@jeffque/

UnwieldyDimwittedAardwolf

Python

No description

fork
loading
Files
  • main.py
main.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
from threading import Thread

c_sorted = False
swaps = 0

# Função que inverte os valores se necessário:
def swap (sequence, i, j):
    global c_sorted, swaps
    if sequence[i] > sequence[j]:
        sequence[i], sequence[j] = sequence[j], sequence[i]
        c_sorted = False
        swaps += 1
        
# Sequência a ser ordenada:
sequence = [9,8,7,6,5,4,3,2,1,0]

# Sequência ordenada para controle:
ordered = sorted(sequence)

# Condição se a lista está ordenada:
while not c_sorted:
    c_sorted = True
    # Lista de threads para índices pares:
    evens = []
    
    # Swap entre todos os valores de índice par com seu sucessor imediato:
    for i in range(0, len(sequence), 2):
        t = Thread(target=swap, args=(sequence, i, i+1))
        t.run()
        evens.append(t)
        
    # Aguarda todas as threads anteriores:
    (t.join() for t in evens)
    
    # Lista de threads para índices ímpares:
    odds = []
    
    # Swap entre todos os valores de índice ímpar com seu sucessor imediato:
    for i in range(1, len(sequence)-1, 2):
        t = Thread(target=swap, args=(sequence, i, i+1))
        t.run()
        odds.append(t)
        
    # Aguarda todas as threads anteriores:
    (t.join() for t in odds)
    
print(sequence)
print("swaps: %d" % swaps)