Pārlūkot izejas kodu

Merge branch 'eliam-MergeSort'

eliam.ruiz 2 gadus atpakaļ
vecāks
revīzija
d75eb7c47d
2 mainītis faili ar 57 papildinājumiem un 3 dzēšanām
  1. 1
    0
      .gitignore
  2. 56
    3
      sorting.py

+ 1
- 0
.gitignore Parādīt failu

@@ -0,0 +1 @@
1
+.DS_Store

+ 56
- 3
sorting.py Parādīt failu

@@ -9,8 +9,59 @@ Al final se imprimen los promedios de cada algortimo
9 9
 from random import randint
10 10
 import time
11 11
 
12
-def mergeSort(lista):
12
+def merge(lista, start, middle, end):
13
+	# Create Temp arrays with specifically needed sizes foe the given array
14
+	sizeOfHalf1 = middle - start + 1
15
+	sizeOfHalf2 = end - middle
16
+	half1 = [0] * (sizeOfHalf1)
17
+	half2 = [0] * (sizeOfHalf2)
18
+    # Copy data from the received array to the temporary working arrays
19
+	for i in range(0, sizeOfHalf1):
20
+		half1[i] = lista[start + i]
21
+	for t in range(0,sizeOfHalf2):
22
+		half2[t] = lista[middle + 1 + t] 
23
+	
24
+	# Merge the temporary arrays back into the recieved list
25
+	i = 0 # initial index of firs subarray 
26
+	t = 0 # initial index of second subarray
27
+	k = start # initial index of merged subarray
28
+
29
+	while i < sizeOfHalf1 and t < sizeOfHalf2:
30
+		if half1[i] <= half2[t]:
31
+			lista[k] = half1[i]
32
+			i += 1
33
+		else:
34
+			lista[k] = half2[t]
35
+			t += 1
36
+		k += 1
37
+	# Copy the remaining elements on half1 if there are any
38
+	while i < sizeOfHalf1:
39
+		lista[k] = half1[i]
40
+		i += 1
41
+		k += 1
42
+
43
+	# Copy the remaining elements on half2 if there are any
44
+	while t < sizeOfHalf2:
45
+		lista[k] = half2[t]
46
+		t += 1
47
+		k += 1
48
+
49
+# start is for left index and end is the right index of the subarray
50
+# of lista to be stored 
51
+
52
+def mergeSort(lista,l,r):
13 53
 	#definan el algoritmo de ordenamiento mergesort
54
+	if l < r:
55
+		# Same as (l+r)//2, but avoids overflow for
56
+        # large l and h
57
+		m = l+(r-l)//2
58
+
59
+		# Sort each half
60
+		mergeSort(lista, l, m)
61
+		mergeSort(lista, m+1, r)
62
+		# Merge the sorted halves
63
+		merge(lista, l, m, r)
64
+
14 65
 	return lista
15 66
 
16 67
 # https://en.wikipedia.org/wiki/Heapsort
@@ -60,7 +111,9 @@ for i in range(veces):
60 111
 	searchlista=list(mergelista)
61 112
 
62 113
 	t1 = time.clock() 				#seteamos el tiempo al empezar
63
-	mergeSort(mergelista) 				#ejecutamos el algoritmo mergeSort
114
+	l = 0
115
+	r = len(mergelista) - 1
116
+	finished = mergeSort(mergelista, l,r) 				#ejecutamos el algoritmo mergeSort
64 117
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
65 118
 	
66 119
 	t1 = time.clock()				#seteamos el tiempo al empezar
@@ -76,7 +129,7 @@ for i in range(veces):
76 129
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
77 130
 
78 131
 #imprimos los resultados
79
-print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
132
+print "Promedio de tiempo de ejecucion de " + str(veces) +" listas de largo " + str(largoLista)
80 133
 print "MergeSort " + str(acumulaMerge/veces) + " segundos"
81 134
 print "HeapSort " + str(acumulaHeap/veces) + " segundos"
82 135
 print "QuickSort " + str(acumulaQuick/veces) + " segundos"