Browse Source

Sorting file: Cambios de Corrada y HeapSort implementados

Diego 3 years ago
parent
commit
e91055b835
1 changed files with 56 additions and 14 deletions
  1. 56
    14
      sorting.py

+ 56
- 14
sorting.py View File

1
+#coding=utf-8
2
+
3
+"""
4
+Programadores:
5
+
6
+"""
7
+
1
 """
8
 """
2
 Carlos J Corrada Bravo
9
 Carlos J Corrada Bravo
3
 Este programa calcula el promedio de tiempo de ejecución de cuatro algoritmos de ordenamiento
10
 Este programa calcula el promedio de tiempo de ejecución de cuatro algoritmos de ordenamiento
4
 La variable maxValor define el valor maximo de los elementos de la lista
11
 La variable maxValor define el valor maximo de los elementos de la lista
5
 La variable largoLista define el largo de las listas a ordenar
12
 La variable largoLista define el largo de las listas a ordenar
6
-La variable veces define las veces que se va a hacer el ordenamiento 
13
+La variable veces define las veces que se va a hacer el ordenamiento
7
 Al final se imprimen los promedios de cada algortimo
14
 Al final se imprimen los promedios de cada algortimo
8
 """
15
 """
16
+
9
 from random import randint
17
 from random import randint
10
 import time
18
 import time
11
 
19
 
12
-def mergeSort(lista):
20
+def mergeSort(listaMerge):
13
 	#definan el algoritmo de ordenamiento mergesort
21
 	#definan el algoritmo de ordenamiento mergesort
22
+
14
 	return lista
23
 	return lista
15
 
24
 
16
-def heapSort(lista):
25
+#===============================
26
+#Modificación a código: Diego
27
+#Añado función heapify
28
+#===============================
29
+def heapify(listaHeap, largoLista, i):
30
+	largest = i
31
+	left = 2 * i + 1
32
+	right = 2 * i + 2
33
+
34
+	if left < largoLista and listaHeap[i] < listaHeap[left]:
35
+		largest = left
36
+
37
+	if right < largoLista and listaHeap[largest] < listaHeap[right]:
38
+		largest = right
39
+
40
+	if largest != i:
41
+		listaHeap[i], listaHeap[largest] = listaHeap[largest], listaHeap[i]
42
+		heapify(listaHeap, largoLista, largest)
43
+#Fin de función heapify
44
+#===============================
45
+
46
+def heapSort(listaHeap):
17
 	#definan el algoritmo de ordenamiento heapsort
47
 	#definan el algoritmo de ordenamiento heapsort
18
-	return lista
48
+
49
+	for i in range(len(listaHeap) / 2, -1, -1):
50
+		heapify(listaHeap, len(listaHeap), i)
51
+
52
+	for i in range(len(listaHeap) - 1, 0, -1):
53
+		listaHeap[i], listaHeap[0] = listaHeap[0], listaHeap[i]
54
+		heapify(listaHeap, i, 0)
55
+	return listaHeap
19
 
56
 
20
 def quickSort(lista):
57
 def quickSort(lista):
21
 	#definan el algoritmo de ordenamiento quicksort
58
 	#definan el algoritmo de ordenamiento quicksort
27
 
64
 
28
 maxValor=1000 	#define el valor maximo de los elementos de la lista
65
 maxValor=1000 	#define el valor maximo de los elementos de la lista
29
 largoLista=1000 #define el largo de las listas a ordenar
66
 largoLista=1000 #define el largo de las listas a ordenar
30
-veces=100 		#define las veces que se va a hacer el ordenamiento 
67
+veces=100 		#define las veces que se va a hacer el ordenamiento
31
 
68
 
32
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
69
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
33
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
70
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
35
 acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
72
 acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
36
 
73
 
37
 for i in range(veces):
74
 for i in range(veces):
38
-	lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
75
+	#Creamos una lista con valores al azar
76
+	lista = [randint(0,maxValor) for r in range(largoLista)]
77
+
78
+	listaMerge = lista[:]
79
+	listaHeap = lista[:]
80
+	listaQuick = lista[:]
81
+	listaShell = lista[:]
39
 
82
 
40
 	t1 = time.clock() 				#seteamos el tiempo al empezar
83
 	t1 = time.clock() 				#seteamos el tiempo al empezar
41
-	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
84
+	mergeSort(listaMerge) 			#ejecutamos el algoritmo mergeSort
42
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
85
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
43
-	
86
+
44
 	t1 = time.clock()				#seteamos el tiempo al empezar
87
 	t1 = time.clock()				#seteamos el tiempo al empezar
45
-	heapSort(lista)					#ejecutamos el algoritmo heapSort
88
+	heapSort(listaHeap)				#ejecutamos el algoritmo heapSort
46
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
89
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
47
-	
90
+
48
 	t1 = time.clock()				#seteamos el tiempo al empezar
91
 	t1 = time.clock()				#seteamos el tiempo al empezar
49
-	quickSort(lista)				#ejecutamos el algoritmo quickSort
92
+	quickSort(listaQuick)			#ejecutamos el algoritmo quickSort
50
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
93
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
51
-	
94
+
52
 	t1 = time.clock()				#seteamos el tiempo al empezar
95
 	t1 = time.clock()				#seteamos el tiempo al empezar
53
-	shellSort(lista)				#ejecutamos el algoritmo shellSort
96
+	shellSort(listaShell)			#ejecutamos el algoritmo shellSort
54
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
97
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
55
 
98
 
56
 #imprimos los resultados
99
 #imprimos los resultados
59
 print "HeapSort " + str(acumulaHeap/veces) + " segundos"
102
 print "HeapSort " + str(acumulaHeap/veces) + " segundos"
60
 print "QuickSort " + str(acumulaQuick/veces) + " segundos"
103
 print "QuickSort " + str(acumulaQuick/veces) + " segundos"
61
 print "ShellSort " + str(acumulaShell/veces) + " segundos"
104
 print "ShellSort " + str(acumulaShell/veces) + " segundos"
62
-