Procházet zdrojové kódy

Implemented ShellSort Function

Joel před 3 roky
rodič
revize
5ae6cc21d9
1 změnil soubory, kde provedl 51 přidání a 19 odebrání
  1. 51
    19
      sorting.py

+ 51
- 19
sorting.py Zobrazit soubor

@@ -22,7 +22,39 @@ def quickSort(lista):
22 22
 	return lista
23 23
 
24 24
 def shellSort(lista):
25
-	#definan el algoritmo de ordenamiento shellsort
25
+	# Subarrays are sorted according to intervals
26
+	# After each set of subarrays is sorted, interval value is updated and process repeats
27
+	# Function stops once iteration with interval = 1 has executed
28
+	# print(lista)
29
+	interval = len(lista) // 2
30
+	while interval > 0:
31
+		# Process repeats for each value between 1 -> interval
32
+		for i in range(0, interval):
33
+			# Starting index determines initial portion of the array that is sorted
34
+			sortedIndex = i
35
+			# Process repeats as long as the current value being considered is greater than the value to its left
36
+			# Being greater than the value to its left means that it is not in the correct location
37
+			j = i
38
+			while j + interval < len(lista):
39
+				if lista[j] > lista[j + interval]:
40
+					# Swapping values so that smaller value is to the left
41
+					temp = lista[j]
42
+					lista[j] = lista[j + interval]
43
+					lista[j + interval] = temp
44
+					# print(lista)
45
+					n = j
46
+					# Continue comparing value that was swapped left to other values to the left to make sure it is placed in the correct location
47
+					while n - interval >= 0 and lista[n] < lista[n - interval]:
48
+						# Swapping values so that smaller value is to the left
49
+						temp = lista[n]
50
+						lista[n] = lista[n - interval]
51
+						lista[n - interval] = temp
52
+						n -= interval
53
+				# print(lista)
54
+				# Update index to continue comparison with the next value in the sub array
55
+				j += interval
56
+		interval //= 2
57
+	# print(lista)
26 58
 	return lista
27 59
 
28 60
 maxValor=1000 	#define el valor maximo de los elementos de la lista
@@ -37,26 +69,26 @@ acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
37 69
 for i in range(veces):
38 70
 	lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
39 71
 
40
-	t1 = time.clock() 				#seteamos el tiempo al empezar
41
-	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
42
-	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
72
+	# t1 = time.clock() 				#seteamos el tiempo al empezar
73
+	# mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
74
+	# acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
43 75
 	
44
-	t1 = time.clock()				#seteamos el tiempo al empezar
45
-	heapSort(lista)					#ejecutamos el algoritmo heapSort
46
-	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
76
+	# t1 = time.clock()				#seteamos el tiempo al empezar
77
+	# heapSort(lista)					#ejecutamos el algoritmo heapSort
78
+	# acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
79
+	#
80
+	# t1 = time.clock()				#seteamos el tiempo al empezar
81
+	# quickSort(lista)				#ejecutamos el algoritmo quickSort
82
+	# acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
47 83
 	
48
-	t1 = time.clock()				#seteamos el tiempo al empezar
49
-	quickSort(lista)				#ejecutamos el algoritmo quickSort
50
-	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
51
-	
52
-	t1 = time.clock()				#seteamos el tiempo al empezar
53
-	shellSort(lista)				#ejecutamos el algoritmo shellSort
54
-	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
84
+	t1 = time.perf_counter()				#seteamos el tiempo al empezar
85
+	shellSort(lista)						#ejecutamos el algoritmo shellSort
86
+	acumulaShell+=time.perf_counter()-t1 	#acumulamos el tiempo de ejecucion
55 87
 
56 88
 #imprimos los resultados
57
-print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
58
-print "MergeSort " + str(acumulaMerge/veces) + " segundos"
59
-print "HeapSort " + str(acumulaHeap/veces) + " segundos"
60
-print "QuickSort " + str(acumulaQuick/veces) + " segundos"
61
-print "ShellSort " + str(acumulaShell/veces) + " segundos"
89
+print ("Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista))
90
+# print "MergeSort " + str(acumulaMerge/veces) + " segundos"
91
+# print "HeapSort " + str(acumulaHeap/veces) + " segundos"
92
+# print "QuickSort " + str(acumulaQuick/veces) + " segundos"
93
+print ("ShellSort " + str(acumulaShell/veces) + " segundos")
62 94