Browse Source

implementation merge sort

Eliam Ruiz Agosto 2 years ago
parent
commit
45ae11fb68
2 changed files with 56 additions and 3 deletions
  1. BIN
      .DS_Store
  2. 56
    3
      sorting.py

BIN
.DS_Store View File


+ 56
- 3
sorting.py View File

@@ -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
 def heapSort(lista):
@@ -41,7 +92,9 @@ for i in range(veces):
41 92
 	searchlista=list(mergelista)
42 93
 
43 94
 	t1 = time.clock() 				#seteamos el tiempo al empezar
44
-	mergeSort(mergelista) 				#ejecutamos el algoritmo mergeSort
95
+	l = 0
96
+	r = len(mergelista) - 1
97
+	finished = mergeSort(mergelista, l,r) 				#ejecutamos el algoritmo mergeSort
45 98
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
46 99
 	
47 100
 	t1 = time.clock()				#seteamos el tiempo al empezar
@@ -57,7 +110,7 @@ for i in range(veces):
57 110
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
58 111
 
59 112
 #imprimos los resultados
60
-print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
113
+print "Promedio de tiempo de ejecucion de " + str(veces) +" listas de largo " + str(largoLista)
61 114
 print "MergeSort " + str(acumulaMerge/veces) + " segundos"
62 115
 print "HeapSort " + str(acumulaHeap/veces) + " segundos"
63 116
 print "QuickSort " + str(acumulaQuick/veces) + " segundos"