-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path09_quick_sort_int.py
69 lines (52 loc) · 1.76 KB
/
09_quick_sort_int.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
def quick_sort(lista, ini = 0, fim = None):
"""
Função que implementa o algoritmo Quick Sort de forma ITERATIVA
"""
if fim is None: fim = len(lista) - 1
# Cria uma lista auxiliar
tamanho = fim - ini + 1
aux = [None] * tamanho
# Inicializa a posição da lista auxiliar
pos = -1
# Coloca os valores iniciais de ini e fim na lista auxiliar
pos = pos + 1
aux[pos] = ini
pos = pos + 1
aux[pos] = fim
# Continua retirando valores da lista auxiliar enquanto
# ela não estiver vazia
while pos >= 0:
# print(aux)
# Retira fim e início
fim = aux[pos]
pos = pos - 1
ini = aux[pos]
pos = pos - 1
# Coloca o pivô em sua posição correta na lista ordenada
i = ini - 1
x = lista[fim]
for j in range(ini , fim):
if lista[j] <= x:
# Incrementa a posição do menor elemento
i = i + 1
lista[i], lista[j] = lista[j], lista[i]
lista[i + 1], lista[fim] = lista[fim], lista[i + 1]
pivot = i + 1
# Se há elementos à esquerda do pivô, coloca-os
# no lado esquerdo da lista auxiliar
if pivot - 1 > ini:
pos = pos + 1
aux[pos] = ini
pos = pos + 1
aux[pos] = pivot - 1
# Se há elementos à direita do pivô, coloca-os
# no lado direito da lista auxiliar
if pivot + 1 < fim:
pos = pos + 1
aux[pos] = pivot + 1
pos = pos + 1
aux[pos] = fim
########################################################################
nums = [88, 44, 33, 0, 99, 55, 77, 22, 11, 66]
quick_sort(nums)
print(nums)