Browse Source

MergeSort function code added

Alex Ortiz 2 years ago
parent
commit
9719acd64b
1 changed files with 25 additions and 6 deletions
  1. 25
    6
      sorting.py

+ 25
- 6
sorting.py View File

@@ -3,7 +3,7 @@ Carlos J Corrada Bravo
3 3
 Este programa calcula el promedio de tiempo de ejecucion de cuatro algoritmos de ordenamiento
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
-La variable veces define las veces que se va a hacer el ordenamiento 
6
+La variable veces define las veces que se va a hacer el ordenamiento
7 7
 Al final se imprimen los promedios de cada algortimo
8 8
 """
9 9
 from random import randint
@@ -11,6 +11,26 @@ import time
11 11
 
12 12
 def mergeSort(lista):
13 13
 	#definan el algoritmo de ordenamiento mergesort
14
+	if len(lista) > 1:
15
+		Midd = len(lista) // 2
16
+		Left = lista[:Midd]
17
+		if len(Left) != 1:
18
+			mergeSort(Left)
19
+		Right = lista[Midd:]
20
+		if len(Right) != 1:
21
+			mergeSort(Right)
22
+
23
+        i = j = k = 0
24
+
25
+        while i < len(Left) and j < len(Right):
26
+            if Left[i] < Right[j]:
27
+                lista[k] = Right[i]
28
+                i += 1
29
+            else:
30
+                lista[k] = Right[j]
31
+                j += 1
32
+            k += 1
33
+
14 34
 	return lista
15 35
 
16 36
 def heapSort(lista):
@@ -27,7 +47,7 @@ def shellSort(lista):
27 47
 
28 48
 maxValor=1000 	#define el valor maximo de los elementos de la lista
29 49
 largoLista=1000 #define el largo de las listas a ordenar
30
-veces=100 		#define las veces que se va a hacer el ordenamiento 
50
+veces=100 		#define las veces que se va a hacer el ordenamiento
31 51
 
32 52
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
33 53
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
@@ -43,15 +63,15 @@ for i in range(veces):
43 63
 	t1 = time.clock() 				#seteamos el tiempo al empezar
44 64
 	mergeSort(mergelista) 				#ejecutamos el algoritmo mergeSort
45 65
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
46
-	
66
+
47 67
 	t1 = time.clock()				#seteamos el tiempo al empezar
48 68
 	heapSort(heaplista)					#ejecutamos el algoritmo heapSort
49 69
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
50
-	
70
+
51 71
 	t1 = time.clock()				#seteamos el tiempo al empezar
52 72
 	quickSort(quicklista)				#ejecutamos el algoritmo quickSort
53 73
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
54
-	
74
+
55 75
 	t1 = time.clock()				#seteamos el tiempo al empezar
56 76
 	shellSort(searchlista)				#ejecutamos el algoritmo shellSort
57 77
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
@@ -62,4 +82,3 @@ print "MergeSort " + str(acumulaMerge/veces) + " segundos"
62 82
 print "HeapSort " + str(acumulaHeap/veces) + " segundos"
63 83
 print "QuickSort " + str(acumulaQuick/veces) + " segundos"
64 84
 print "ShellSort " + str(acumulaShell/veces) + " segundos"
65
-