Browse Source

anadir quick sort

Ydnek1 3 years ago
parent
commit
2418628a71
1 changed files with 31 additions and 6 deletions
  1. 31
    6
      sorting.py

+ 31
- 6
sorting.py View File

@@ -4,7 +4,7 @@ Carlos J Corrada Bravo
4 4
 Este programa calcula el promedio de tiempo de ejecución de cuatro algoritmos de ordenamiento
5 5
 La variable maxValor define el valor maximo de los elementos de la lista
6 6
 La variable largoLista define el largo de las listas a ordenar
7
-La variable veces define las veces que se va a hacer el ordenamiento 
7
+La variable veces define las veces que se va a hacer el ordenamiento
8 8
 Al final se imprimen los promedios de cada algortimo
9 9
 """
10 10
 from random import randint
@@ -21,9 +21,34 @@ def heapSort(lista):
21 21
 	#definan el algoritmo de ordenamiento heapsort
22 22
 	return lista
23 23
 
24
+
25
+def partition(lista, low, high):
26
+    pivot = lista[high]
27
+
28
+    i = low - 1
29
+
30
+    for j in range(low, high):
31
+        if (lista[j] < pivot):
32
+            i += 1
33
+            lista[i], lista[j] = lista[j], lista[i]
34
+
35
+    lista[i+1], lista[high] = lista[high], lista[i+1]
36
+
37
+    return i + 1
38
+
39
+def quickSortRec(lista, low, high):
40
+
41
+    if (low < high):
42
+        p = partition(lista, low, high)
43
+
44
+    quickSortRec(lista, low, p - 1)
45
+    quickSortRec(lista, p + 1, high)
46
+
47
+    return lista
48
+
24 49
 def quickSort(lista):
25 50
 	#definan el algoritmo de ordenamiento quicksort
26
-	return lista
51
+	return quickSortRec(lista, 0, len(lista) - 1)
27 52
 
28 53
 def insertionSort(lista):
29 54
 
@@ -61,7 +86,7 @@ def shellSort(lista):
61 86
 
62 87
 maxValor=1000 	#define el valor maximo de los elementos de la lista
63 88
 largoLista=1000 #define el largo de las listas a ordenar
64
-veces=100 		#define las veces que se va a hacer el ordenamiento 
89
+veces=100 		#define las veces que se va a hacer el ordenamiento
65 90
 
66 91
 acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
67 92
 acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
@@ -80,15 +105,15 @@ for i in range(veces):
80 105
 	t1 = time.clock() 				#seteamos el tiempo al empezar
81 106
 	mergeSort(listaMerge) 				#ejecutamos el algoritmo mergeSort
82 107
 	acumulaMerge+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
83
-	
108
+
84 109
 	t1 = time.clock()				#seteamos el tiempo al empezar
85 110
 	heapSort(listaHeap)					#ejecutamos el algoritmo heapSort
86 111
 	acumulaHeap+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
87
-	
112
+
88 113
 	t1 = time.clock()				#seteamos el tiempo al empezar
89 114
 	quickSort(listaQuick)				#ejecutamos el algoritmo quickSort
90 115
 	acumulaQuick+=time.clock()-t1 	#acumulamos el tiempo de ejecucion
91
-	
116
+
92 117
 	t1 = time.clock()				#seteamos el tiempo al empezar
93 118
 	shellSort(listaShell)				#ejecutamos el algoritmo shellSort
94 119
 	acumulaShell+=time.clock()-t1 	#acumulamos el tiempo de ejecucion