Browse Source

hice un branch con el shellsort implementado

Edward Garcia Lopez 1 year ago
parent
commit
ef4bda4c6e
2 changed files with 51 additions and 33 deletions
  1. 2
    1
      README.md
  2. 49
    32
      sorting.py

+ 2
- 1
README.md View File

@@ -1 +1,2 @@
1
-Este es el README del grupo 4. Conisiste de Andrel, Edward, Michael y Jasiel.
1
+Este es el README del grupo 4. Consiste de Andrel, Edward, Michael y Jasiel.
2
+Este Branch esta acargo de Edward con el propósito de hacer un Shell Sort.

+ 49
- 32
sorting.py View File

@@ -4,62 +4,79 @@ Este programa calcula el promedio de tiempo de ejecucion de cuatro algoritmos de
4 4
 La variable maxValor define el valor maximo de los elementos de la lista
5 5
 La variable largoLista define el largo de las listas a ordenar
6 6
 La variable veces define las veces que se va a hacer el ordenamiento 
7
-Al final se imprimen los promedios de cada algortimo
7
+Al final se imprimen los promedios de cada algoritmo
8
+
9
+Shellsort modificado por: Edward Garcia
10
+Num. de est: 801-18-6162
8 11
 """
9 12
 from random import randint
10 13
 import time
11 14
 
12 15
 def mergeSort(lista):
13
-	#definan el algoritmo de ordenamiento mergesort
16
+	# definan el algoritmo de ordenamiento mergesort
14 17
 	return lista
15 18
 
16 19
 def heapSort(lista):
17
-	#definan el algoritmo de ordenamiento heapsort
20
+	# definan el algoritmo de ordenamiento heapsort
18 21
 	return lista
19 22
 
20 23
 def quickSort(lista):
21
-	#definan el algoritmo de ordenamiento quicksort
24
+	# definan el algoritmo de ordenamiento quicksort
22 25
 	return lista
23 26
 
24 27
 def shellSort(lista):
25
-	#definan el algoritmo de ordenamiento shellsort
28
+	# definan el algoritmo de ordenamiento shellsort
29
+	div = len(lista) / 2
30
+	# verifica si no se puede dividir mas
31
+	while div != 0:
32
+	# dividir lista en sub listas
33
+		for j in range(div):
34
+			# hacer insertion sort en sub listas
35
+			for x in range(div + j, len(lista), div):
36
+				key = lista[x]
37
+				pos = x - div
38
+				while pos >= 0 and key < lista[pos]:
39
+					lista[pos + div] = lista[pos]
40
+					pos -= div
41
+				lista[pos + div] = key
42
+		div /= 2
26 43
 	return lista
27 44
 
28
-maxValor=1000 	#define el valor maximo de los elementos de la lista
29
-largoLista=1000 #define el largo de las listas a ordenar
30
-veces=100 		#define las veces que se va a hacer el ordenamiento 
31 45
 
32
-acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
33
-acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
34
-acumulaQuick=0 	#variable para acumular el tiempo de ejecucion del quicksort
35
-acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
46
+maxValor = 1000 	# define el valor maximo de los elementos de la lista
47
+largoLista = 1000  # define el largo de las listas a ordenar
48
+veces = 100 		# define las veces que se va a hacer el ordenamiento
49
+
50
+acumulaMerge = 0 	# variable para acumular el tiempo de ejecucion del mergesort
51
+acumulaHeap = 0 	# variable para acumular el tiempo de ejecucion del heapsort
52
+acumulaQuick = 0 	# variable para acumular el tiempo de ejecucion del quicksort
53
+acumulaShell = 0 	# variable para acumular el tiempo de ejecucion del shellsort
36 54
 
37 55
 for i in range(veces):
38
-	mergelista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
39
-	heaplista=list(mergelista)
40
-	quicklista=list(mergelista)
41
-	searchlista=list(mergelista)
56
+	mergelista = [randint(0,maxValor) for r in range(largoLista)] # creamos una lista con valores al azar
57
+	heaplista = list(mergelista)
58
+	quicklista = list(mergelista)
59
+	searchlista = list(mergelista)
42 60
 
43
-	t1 = time.clock() 				#seteamos el tiempo al empezar
44
-	mergeSort(mergelista) 				#ejecutamos el algoritmo mergeSort
45
-	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
61
+	t1 = time.clock() 				# seteamos el tiempo al empezar
62
+	mergeSort(mergelista) 				# ejecutamos el algoritmo mergeSort
63
+	acumulaMerge += time.clock()-t1 	# acumulamos el tiempo de ejecucion
46 64
 	
47
-	t1 = time.clock()				#seteamos el tiempo al empezar
48
-	heapSort(heaplista)					#ejecutamos el algoritmo heapSort
49
-	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
65
+	t1 = time.clock()				# seteamos el tiempo al empezar
66
+	heapSort(heaplista)					# ejecutamos el algoritmo heapSort
67
+	acumulaHeap += time.clock()-t1 	# acumulamos el tiempo de ejecucion
50 68
 	
51
-	t1 = time.clock()				#seteamos el tiempo al empezar
52
-	quickSort(quicklista)				#ejecutamos el algoritmo quickSort
53
-	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
69
+	t1 = time.clock()				# seteamos el tiempo al empezar
70
+	quickSort(quicklista)				# ejecutamos el algoritmo quickSort
71
+	acumulaQuick += time.clock()-t1 	# acumulamos el tiempo de ejecucion
54 72
 	
55
-	t1 = time.clock()				#seteamos el tiempo al empezar
56
-	shellSort(searchlista)				#ejecutamos el algoritmo shellSort
57
-	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
73
+	t1 = time.clock()				# seteamos el tiempo al empezar
74
+	shellSort(searchlista)				# ejecutamos el algoritmo shellSort
75
+	acumulaShell += time.clock()-t1 	# acumulamos el tiempo de ejecucion
58 76
 
59
-#imprimos los resultados
60
-print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
77
+# imprimimos los resultados
78
+print "Promedio de tiempo de ejecucion de " + str(veces) +" listas de largo " + str(largoLista)
61 79
 print "MergeSort " + str(acumulaMerge/veces) + " segundos"
62 80
 print "HeapSort " + str(acumulaHeap/veces) + " segundos"
63 81
 print "QuickSort " + str(acumulaQuick/veces) + " segundos"
64
-print "ShellSort " + str(acumulaShell/veces) + " segundos"
65
-
82
+print "ShellSort " + str(acumulaShell/veces) + " segundos"