-
Notifications
You must be signed in to change notification settings - Fork 0
/
sorttest.py
61 lines (51 loc) · 1.58 KB
/
sorttest.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
def sort(lista):
pasos = 0
long = len(lista)
factor = 2
a = 2.1
b = 3
if long > 14:
while factor * int(a * factor + b) <= long:
factor += 1
factor -= 1
distancia = long//factor
while long > 1:
for i in range(0, distancia):
for j in range(i, long - distancia, distancia):
next = j + distancia
if lista[j] > lista[next]:
lista[j], lista[next] = lista[next], lista[j]
pasos += 1
distancia -= 1
if not distancia:
break
return (lista, pasos, factor)
from random import shuffle#, randrange
'''
cant = 50
valores = [i for i in range(cant)]
#valores = [i for i in range(cant,0,-1)]
#valores = [1 for i in range(cant)]
#valores = [randrange(0,cant) for i in range(cant)]
#valores = [0 for i in range(cant)] + [1 for j in range(cant)]
shuffle(valores)
copia = valores[:]
print("Lista original:\n", valores)
resultado = sort(valores)
print("\nLista ordenada:\n", resultado[0], "\n\nPasos:", resultado[1],"(", resultado[0] == sorted(copia),")\n")
'''
pruebas = 50
cant = 500
for j in range(0,cant):
valores = [i for i in range(j)]
copia = valores[:]
for i in range(pruebas):
shuffle(valores)
resultado = sort(valores)
if resultado[0] != sorted(copia):
break
if i < pruebas - 1:
print("\n¡Todo marchaba relativamente bien, hasta que todo empezó a marchar relativamente mal!\nPrueba =", i,"\n")
else:
print("\n¡OK, polisha!\nPasos =",resultado[1],"\n")
#'''