-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTRABSPROG (1).py
270 lines (233 loc) · 12.4 KB
/
TRABSPROG (1).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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
import random
import time
tempo_sort = 0
tempo_insercao = 0
tempo_bolha = 0
tempo_selecao = 0
tempo_final = 0
# ------------------------------------FUNÇÕES --------------------------------
# Essa função cria uma lista aleátoria de 100 números inteiros.(1, 100)
def cem_numeros():
lista_cem = []
for c in range(1, 100):
lista_cem.append(random.randint(1, 100))
return lista_cem
# Essa função cria uma lista aleátoria de 1.000 números inteiros. (1, 1.000)
def mil_numeros():
lista_mil = []
for m in range(1, 1000):
lista_mil.append(random.randint(1, 1000))
return lista_mil
# Essa função cria uma lista aleatória de 10.000 números inteiros.(1, 10.000)
def dezmil_numeros():
lista_dezmil = []
for d in range(1, 10000):
lista_dezmil.append(random.randint(1, 10000))
return lista_dezmil
# Essa função recebe uma lista de números inteiros aleatórios e os coloca em ordem crescente por método de ordenação por bolha
def ordena_bolha(lista_passada):
# A função time.time inicia a contagem do tempo de execução do código
tempo_inicial = time.time()
lista = lista_passada
# Esse for diminui o tamanho da lista após os números maiores serem colocados nas últimas posições
for pula_num in range(len(lista) - 1, 0, -1):
# Coloca o maior número da lista na última posição
for i in range(pula_num):
if lista[i] > lista[i + 1]:
lista[i], lista[i + 1] = lista[i + 1], lista[i]
# A função time.time finaliza a contagem do tempo de execução do código
tempo_final = time.time()
# Define a variável como global para ser usada fora do escopo da função
global tempo_bolha
# Subtrai o tempo final pelo inicial para saber o tempo de execução
tempo_bolha = tempo_final - tempo_inicial
# Retorna a lista ordenada
return lista
# Essa função recebe uma lista de números inteiros aleatórios e os coloca em ordem crescente por método de ordenação por seleção
def ordena_selecao(lista_passada):
# A função time.time inicia a contagem do tempo de execução do código
tempo_inicial = time.time()
lista = lista_passada
# Lê o tamanho da lista
n = len(lista)
# Percorre o tamanho da lista
for i in range(n):
# Encontra o menor elemento em lista_passada
menor = i
for j in range(i + 1, n):
if lista[menor] > lista[j]:
menor = j
# Coloca o menor elemento na posição correta(a esquerda do i os elementos estarão já ordenados, a direita nenhum elemento é menor que os elementos a esquerda de i)
lista[i], lista[menor] = lista[menor], lista[i]
# A função time.time finaliza a contagem do tempo de execução do código
tempo_final = time.time()
# Define a variável como global para ser usada fora do escopo da função
global tempo_selecao
# Subtrai o tempo final pelo inicial para saber o tempo de execução
tempo_selecao = tempo_final - tempo_inicial
# Retorna a lista ordenada
return lista
# Essa função recebe uma lista de números inteiros aleatórios e os coloca em ordem crescente por método de ordenação por bolha
def ordena_insercao(lista_passada):
# A função time.time inicia a contagem do tempo de execução do código
tempo_inicial = time.time()
lista = lista_passada
# Lê o tamanho da lista
n = len(lista_passada)
# Passa pela lista
for j in range(1, n):
key = lista[j]
i = j - 1
# Põe o elemento lista[j] na posição correta. Todos os elementos à esquerda do i estarão ordenados e os elementos à direita do elemento no i ainda não foram processados (Podem ser menores, maiores, ou iguais ao elemento lista (i))
while i >= 0 and lista[i] > key:
lista[i + 1] = lista[i]
i = i - 1
lista[i + 1] = key
# A função time.time finaliza a contagem do tempo de execução do código
tempo_final = time.time()
# Define a variável como global para ser usada fora do escopo da função
global tempo_insercao
# Subtrai o tempo final pelo inicial para saber o tempo de execução
tempo_insercao = tempo_final - tempo_inicial
# Retorna a lista ordenada
return lista
# Essa função ordena de forma crescente a lista passada, utilizando uma função de ordenação existente em Python
def ordena_sort(lista_passada):
# A função time.time inicia a contagem do tempo de execução do código
tempo_inicial = time.time()
lista = lista_passada
lista.sort()
# A função time.time finaliza a contagem do tempo de execução do código
global tempo_final
tempo_final = time.time()
# Define a variável como global para ser usada fora do escopo da função
global tempo_sort
# Subtrai o tempo final pelo inicial para saber o tempo de execução
tempo_sort = tempo_final - tempo_inicial
# Retorna a lista ordenada
return lista
# Mostra a média de tempo do método bolha
def bolha_media():
soma_bolha = 0
for i in range(1, 101):
ordena_bolha(mil_numeros())
soma_bolha += tempo_bolha
media_bolha = soma_bolha / 100
return media_bolha
# Mostra a média de tempo do método seleção
def selecao_media():
soma_selecao = 0
for i in range(1, 101):
ordena_selecao(mil_numeros())
soma_selecao += tempo_selecao
media_selecao = soma_selecao / 100
return media_selecao
# Mostra a média de tempo do método inserção
def insercao_media():
soma_insercao = 0
for i in range(1, 101):
ordena_insercao(mil_numeros())
soma_insercao += tempo_insercao
media_insercao = soma_insercao / 100
return media_insercao
# Mostra a média de tempo do método sort
def sort_media():
soma_sort = 0
for i in range(1, 101):
ordena_sort(mil_numeros())
soma_sort += tempo_sort
media_sort = soma_sort / 100
return media_sort
# Essa função faz as chamadas das funções anteriores e a partir da seleção de um menu imprime a lista ordenada de escolha na tela
def menu_imprime():
print("Escolha uma opção:\n1 - Método de ordenação por bolhas\n"
"2 - Método de ordenação por seleção\n"
"3 - Método de ordenação por inserção\n"
"4 - Pela função do Python sort()\n"
"5 - Compare os tempos de execução\n"
"6 - Listas sem ordenação\n"
"0 - Encerre o programa")
entrada = int(input("Digite o número: "))
if entrada == 1:
print("Escolha uma das listas a ser ordenada:\n1 - Lista de cem números inteiros aleatórios\n"
"2 - Lista de mil números inteiros aleatórios\n"
"3 - Lista de dez mil números inteiros aleatórios")
entrada = int(input("Digite o número: "))
# MENU Método de ordenação por Bolha -----------------------------------------------------------------------------------------------------
if entrada == 1:
print(f"Lista de cem números inteiros aleatórios: {ordena_bolha(lista_cem.copy())}\nO tempo de execução foi: {tempo_bolha} segundos")
elif entrada == 2:
print(f"Lista de mil números inteiros aleatórios: {ordena_bolha(lista_mil.copy())}\nO tempo de execução foi: {tempo_bolha} segundos")
elif entrada == 3:
print(f"Lista de dez mil números inteiros aleatórios: {ordena_bolha(lista_dezmil.copy())}\nO tempo de execução foi: {tempo_bolha} segundos")
# --------------------------------------------------------------------------------------------------------------------------------------------
# MENU Método de ordenação por Seleção -------------------------------------------------------------------------------------------------------
elif entrada == 2:
print("Escolha uma das listas a ser ordenada:\n1 - Lista de cem números inteiros aleatórios\n"
"2 - Lista de mil números inteiros aleatórios\n"
"3 - Lista de mil números inteiros aleatórios")
entrada = int(input("Digite o número: "))
if entrada == 1:
print(
f"Lista de cem números inteiros aleatórios: {ordena_selecao(lista_cem.copy())}\nO tempo de execução foi: {tempo_selecao} segundos")
elif entrada == 2:
print(f"Lista de mil números inteiros aleatórios: {ordena_selecao(lista_mil.copy())}\nO tempo de execução foi: {tempo_selecao} segundos")
elif entrada == 3:
print(f"Lista de dez mil números inteiros aleatórios: {ordena_selecao(lista_dezmil.copy())}\nO tempo de execução foi: {tempo_selecao} segundos")
# ---------------------------------------------------------------------------------------------------------------------------------------------
# MENU Método de ordenação por Inserção -------------------------------------------------------------------------------------------------------
elif entrada == 3:
print("Escolha uma das listas a ser ordenada:\n1 - Lista de cem números inteiros aleatórios\n"
"2 - Lista de mil números inteiros aleatórios\n"
"3 - Lista de mil números inteiros aleatórios")
entrada = int(input("Digite o número: "))
if entrada == 1:
print(f"Lista de cem números inteiros aleatórios: {ordena_insercao(lista_cem.copy())}\nO tempo de execução foi: {tempo_insercao} segundos")
elif entrada == 2:
print(f"Lista de mil números inteiros aleatórios: {ordena_insercao(lista_mil.copy())}\nO tempo de execução foi: {tempo_insercao} segundos")
elif entrada == 3:
print(f"Lista de dez mil números inteiros aleatórios: {ordena_insercao(lista_dezmil.copy())}\nO tempo de execução foi: {tempo_insercao} segundos")
# ----------------------------------------------------------------------------------------------------------------------------------------------
# MENU Método de ordenação pela função do Python Sort ------------------------------------------------------------------------------------------
elif entrada == 4:
print("Escolha uma das listas a ser ordenada:\n1 - Lista de cem números inteiros aleatórios\n"
"2 - Lista de mil números inteiros aleatórios\n"
"3 - Lista de mil números inteiros aleatórios")
entrada = int(input("Digite o número: "))
if entrada == 1:
print(f"Lista de cem números inteiros aleatórios: {ordena_sort(lista_cem.copy())}\ntempo de execução foi: {tempo_sort} microsegundos")
elif entrada == 2:
print(f"Lista de mil números inteiros aleatórios: {ordena_sort(lista_mil).copy()}\ntempo de execução foi: {tempo_sort} microsegundos")
elif entrada == 3:
print(f"Lista de dez mil números inteiros aleatórios: {ordena_sort(lista_dezmil.copy())}\ntempo de execução foi: {tempo_sort} microsegundos")
# ------------------------------------------------------------------------------------------------------------------------------------------------
# MENU Mostra os tempos de execução de cada método de ordenação
elif entrada == 5:
print(f"A média do tempo de execução do Método Bolha foi: {bolha_media()} segundos")
print(f"A média do tempo de execução do Método Seleção foi: {selecao_media()} segundos")
print(f"A média do tempo de execução do Método Insercao foi: {insercao_media()} segundos")
print(f"A média do tempo de execução do Método Sort foi: {sort_media()} microsegundos")
# MENU Mostra as listas sem ordenação
elif entrada == 6:
print("Escolha uma opção:\n"
"1 - Lista de Cem números\n"
"2 - Lista de Mil números\n"
"3 - Lista de Dez Mil números")
opcao = int(input("Digite o número: "))
if opcao == 1:
print(lista_cem)
elif opcao == 2:
print(lista_mil)
elif opcao == 3:
print(lista_dezmil)
elif entrada == 0:
print("\nPrograma encerrado!")
else:
print("\nOpção inválida!")
# ------------------------------------------------------------------FIM----------------------------------------------------------------------------
# Listas salvas
lista_cem = cem_numeros()
lista_mil = mil_numeros()
lista_dezmil = dezmil_numeros()
# Chamada de funções
menu_imprime()