2 次程式碼提交

作者 SHA1 備註 提交日期
  diegoaperez e8dc73fc59 Commit Merge. 3 年之前
  diegoaperez 62d2acca10 Reverse 3 年之前
共有 1 個文件被更改,包括 102 次插入25 次删除
  1. 102
    25
      sorting.py

+ 102
- 25
sorting.py 查看文件

@@ -11,11 +11,71 @@ from random import randint
11 11
 import time
12 12
 
13 13
 def mergeSort(lista):
14
+        #Camila Vazquez Rodriguez
14 15
 	#definan el algoritmo de ordenamiento mergesort
15
-	return lista
16
+        if len(lista) > 1:
17
+                mid = len(lista)//2
18
+                L = lista[:mid]
19
+                R = lista[mid:]
20
+
21
+                mergeSort(L)
22
+                mergeSort(R)
23
+
24
+                i = 0
25
+                j = 0
26
+                k = 0
27
+
28
+        while i < len(L) and j < len(R):
29
+                if L[i] <= R[j]:
30
+                        lista[k] = L[i]
31
+                        i += 1
32
+                else:
33
+                        lista[k] = R[j]
34
+                        j += 1
35
+                k += 1
36
+
37
+        while i < len(L):
38
+                lista[k] = L[i]
39
+                i += 1
40
+                k += 1
41
+
42
+        while j < len(R):
43
+                lista[k] = R[j]
44
+                j += 1
45
+                k += 1
46
+
47
+        return lista
16 48
 
17 49
 def heapSort(lista):
18 50
 	#definan el algoritmo de ordenamiento heapsort
51
+	"""
52
+	Carlos Hernández
53
+	Implementación de heapSort.
54
+	"""
55
+	def max_heapify(lista, idx, heap_size):
56
+		"""Convertir el nodo `idx` y sus descendientes en un max heap."""
57
+		left_idx = 2 * idx + 1
58
+		right_idx = 2 * idx + 2
59
+		largestval_idx = idx
60
+		if left_idx < heap_size and lista[idx] < lista[left_idx]:
61
+			largestval_idx = left_idx
62
+		if right_idx < heap_size and lista[largestval_idx] < lista[right_idx]:
63
+			largestval_idx = right_idx
64
+		if largestval_idx != idx:
65
+			lista[idx], lista[largestval_idx] = lista[largestval_idx], lista[idx]
66
+			max_heapify(lista, largestval_idx, heap_size)
67
+
68
+	def build_max_heap(lista, heap_size):
69
+		"""Construir un max heap the un heap dado."""
70
+		for idx in range((heap_size - 1) // 2, -1, -1):
71
+			max_heapify(lista, idx, heap_size)
72
+
73
+	heap_size = len(lista)
74
+	build_max_heap(lista, heap_size)
75
+	for idx in range(len(lista) - 1, 0, -1):
76
+		lista[0], lista[idx] = lista[idx], lista[0]
77
+		heap_size -= 1
78
+		max_heapify(lista, 0, heap_size)
19 79
 	return lista
20 80
 
21 81
 def quickSort(lista):
@@ -45,6 +105,29 @@ def quickSort(lista):
45 105
 
46 106
 def shellSort(lista):
47 107
 	#definan el algoritmo de ordenamiento shellsort
108
+
109
+	#El algoritmo compara elementos de una lista
110
+	#que tienen una distancia fija entre ellos, la
111
+	#differencia en distancia se minimiza por cada
112
+	#iterazion del algoritmo
113
+
114
+	num = int(len(lista))
115
+	dif = int(num/2)
116
+
117
+	while dif > 0:
118
+		for i in range(int(dif),int(num)):
119
+			a = lista[i]
120
+			j = i
121
+
122
+			#por cada intervalo se reorganizara los elementos
123
+			#si se cumple la declaracion dentro del while loop
124
+			while j >= dif and lista[int(j - dif)] > a:
125
+				lista[int(j)] = lista[int(j - dif)]
126
+				j -= dif
127
+
128
+			lista[int(j)] = a
129
+		dif/= 2
130
+
48 131
 	return lista
49 132
 
50 133
 maxValor=1000 	#define el valor maximo de los elementos de la lista
@@ -57,33 +140,27 @@ acumulaQuick=0 	#variable para acumular el tiempo de ejecucion del quicksort
57 140
 acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
58 141
 
59 142
 for i in range(veces):
60
-    lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
61
-
62
-    # creamos copias de la lista para cada algoritmo
63
-    listaMerge = lista[:]
64
-    listaHeap = lista[:]
65
-    listaQuick = lista[:]
66
-    listaShell = lista[:]
143
+	lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
67 144
 
68
-    t1 = time.clock()  #seteamos el tiempo al empezar
69
-    mergeSort(listaMerge)  #ejecutamos el algoritmo mergeSort
70
-    acumulaMerge+=time.clock()-t1  #acumulamos el tiempo de ejecucion
145
+	t1 = time.clock() 				#seteamos el tiempo al empezar
146
+	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
147
+	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
71 148
 
72
-    t1 = time.clock()  #seteamos el tiempo al empezar
73
-    heapSort(listaHeap)  #ejecutamos el algoritmo heapSort
74
-    acumulaHeap+=time.clock()-t1 #acumulamos el tiempo de ejecucion
149
+	t1 = time.clock()				#seteamos el tiempo al empezar
150
+	heapSort(lista)					#ejecutamos el algoritmo heapSort
151
+	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
75 152
 
76
-    t1 = time.clock()  #seteamos el tiempo al empezar
77
-    quickSort(listaQuick)  #ejecutamos el algoritmo quickSort
78
-    acumulaQuick+=time.clock()-t1  #acumulamos el tiempo de ejecucion
153
+	t1 = time.clock()				#seteamos el tiempo al empezar
154
+	quickSort(lista)				#ejecutamos el algoritmo quickSort
155
+	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
79 156
 
80
-    t1 = time.clock()  #seteamos el tiempo al empezar
81
-    shellSort(listaShell)  #ejecutamos el algoritmo shellSort
82
-    acumulaShell+=time.clock()-t1  #acumulamos el tiempo de ejecucion
157
+	t1 = time.clock()				#seteamos el tiempo al empezar
158
+	shellSort(lista)				#ejecutamos el algoritmo shellSort
159
+	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
83 160
 
84 161
 #imprimos los resultados
85
-print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
86
-print "MergeSort " + str(acumulaMerge/veces) + " segundos"
87
-print "HeapSort " + str(acumulaHeap/veces) + " segundos"
88
-print "QuickSort " + str(acumulaQuick/veces) + " segundos"
89
-print "ShellSort " + str(acumulaShell/veces) + " segundos"
162
+print ("Promedio de tiempo de ejecucion de " + str(veces) + " listas de largo " + str(largoLista))
163
+print ("MergeSort " + str(acumulaMerge/veces) + " segundos")
164
+print ("HeapSort " + str(acumulaHeap/veces) + " segundos")
165
+print ("QuickSort " + str(acumulaQuick/veces) + " segundos")
166
+print ("ShellSort " + str(acumulaShell/veces) + " segundos")