소스 검색

Implementar Shell sort; corregir copias de listas

부모
커밋
b911d8b007
1개의 변경된 파일45개의 추가작업 그리고 7개의 파일을 삭제
  1. 45
    7
      sorting.py

+ 45
- 7
sorting.py 파일 보기

@@ -10,6 +10,9 @@ Al final se imprimen los promedios de cada algortimo
10 10
 from random import randint
11 11
 import time
12 12
 
13
+def isSorted(lista):
14
+    return lista == sorted(lista)
15
+
13 16
 def mergeSort(lista):
14 17
 	#definan el algoritmo de ordenamiento mergesort
15 18
 	return lista
@@ -22,9 +25,39 @@ def quickSort(lista):
22 25
 	#definan el algoritmo de ordenamiento quicksort
23 26
 	return lista
24 27
 
28
+def insertionSort(lista):
29
+
30
+    i = 1
31
+    while i < len(lista):
32
+        if lista[i - 1] > lista[i]:
33
+            j = i - 1
34
+            while j >= 0 and lista[j] > lista[j + 1]:
35
+                lista[j], lista[j + 1] = lista[j + 1], lista[j]
36
+                j -= 1
37
+        i += 1
38
+
39
+    return lista
40
+
25 41
 def shellSort(lista):
26
-	#definan el algoritmo de ordenamiento shellsort
27
-	return lista
42
+
43
+    gap = len(lista) / 2
44
+    while gap >= 1:
45
+        i = gap
46
+        while i < len(lista):
47
+            if lista[i - gap] > lista[i]:
48
+                j = i - gap
49
+                while j >= 0 and lista[j] > lista[j + gap]:
50
+                    lista[j], lista[j + gap] = lista[j + gap], lista[j]
51
+                    j -= gap
52
+            i += gap
53
+        gap /= 2
54
+
55
+    #if isSorted(lista):
56
+        #print "Lista is sorted"
57
+    #else:
58
+        #print "Lista is not sorted"
59
+
60
+    return lista
28 61
 
29 62
 maxValor=1000 	#define el valor maximo de los elementos de la lista
30 63
 largoLista=1000 #define el largo de las listas a ordenar
@@ -38,20 +71,26 @@ acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
38 71
 for i in range(veces):
39 72
 	lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
40 73
 
74
+        # creamos copias de la lista para cada algoritmo
75
+        listaMerge = lista[:]
76
+        listaHeap = lista[:]
77
+        listaQuick = lista[:]
78
+        listaShell = lista[:]
79
+
41 80
 	t1 = time.clock() 				#seteamos el tiempo al empezar
42
-	mergeSort(lista) 				#ejecutamos el algoritmo mergeSort
81
+	mergeSort(listaMerge) 				#ejecutamos el algoritmo mergeSort
43 82
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
44 83
 	
45 84
 	t1 = time.clock()				#seteamos el tiempo al empezar
46
-	heapSort(lista)					#ejecutamos el algoritmo heapSort
85
+	heapSort(listaHeap)					#ejecutamos el algoritmo heapSort
47 86
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
48 87
 	
49 88
 	t1 = time.clock()				#seteamos el tiempo al empezar
50
-	quickSort(lista)				#ejecutamos el algoritmo quickSort
89
+	quickSort(listaQuick)				#ejecutamos el algoritmo quickSort
51 90
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
52 91
 	
53 92
 	t1 = time.clock()				#seteamos el tiempo al empezar
54
-	shellSort(lista)				#ejecutamos el algoritmo shellSort
93
+	shellSort(listaShell)				#ejecutamos el algoritmo shellSort
55 94
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
56 95
 
57 96
 #imprimos los resultados
@@ -60,4 +99,3 @@ print "MergeSort " + str(acumulaMerge/veces) + " segundos"
60 99
 print "HeapSort " + str(acumulaHeap/veces) + " segundos"
61 100
 print "QuickSort " + str(acumulaQuick/veces) + " segundos"
62 101
 print "ShellSort " + str(acumulaShell/veces) + " segundos"
63
-