forked from kelvins/algorithms-and-data-structures
-
Notifications
You must be signed in to change notification settings - Fork 1
/
insertion_sort.py
59 lines (47 loc) · 1.57 KB
/
insertion_sort.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
"""Implementação do algoritmo insertion sort iterativo e recursivo."""
def insertion_sort_iterativo(vetor):
"""
Implementação do algoritmo de insertion sort iterativo.
Args:
vetor (list): lista que será ordenada.
Returns:
Retorna a lista ordenada.
"""
for i in range(1, len(vetor)):
chave = vetor[i]
aux = i - 1
while aux >= 0 and vetor[aux] > chave:
vetor[aux + 1] = vetor[aux]
aux -= 1
vetor[aux + 1] = chave
return vetor
def insertion_sort_recursivo(vetor, indice):
"""
Implementação do algoritmo de insertion sort recursivo.
Args:
vetor (list): lista que será ordenada.
indice (int): índice do elemento a ser ordenado na lista.
Returns:
Retorna a lista ordenada.
"""
aux = indice
while vetor[aux] < vetor[aux - 1]:
temp = vetor[aux]
vetor[aux] = vetor[aux - 1]
vetor[aux - 1] = temp
aux -= 1
if aux == 0:
break
if indice < len(vetor) - 1:
insertion_sort_recursivo(vetor, indice + 1)
return vetor
if __name__ == '__main__':
lista_nao_ordenada = [8, 1, 3, 5, 7, 9, 0, 2, 4, 6]
print('Lista não ordenada:')
print(lista_nao_ordenada)
lista_nao_ordenada = insertion_sort_iterativo(lista_nao_ordenada)
print('Lista ordenada com insertion sort iterativo:')
print(lista_nao_ordenada)
lista_nao_ordenada = insertion_sort_recursivo(lista_nao_ordenada, 1)
print('Lista ordenada com insertion sort recursivo:')
print(lista_nao_ordenada)