Przeglądaj źródła

added quicksort function

Ricardo 2 lat temu
commit
ce4f341795
1 zmienionych plików z 87 dodań i 0 usunięć
  1. 87
    0
      quicksort.py

+ 87
- 0
quicksort.py Wyświetl plik

@@ -0,0 +1,87 @@
1
+"""
2
+Carlos J Corrada Bravo
3
+Este programa calcula el promedio de tiempo de ejecucion de cuatro algoritmos de ordenamiento
4
+La variable maxValor define el valor maximo de los elementos de la lista
5
+La variable largoLista define el largo de las listas a ordenar
6
+La variable veces define las veces que se va a hacer el ordenamiento 
7
+Al final se imprimen los promedios de cada algortimo
8
+"""
9
+from random import randint
10
+import time
11
+
12
+def mergeSort(lista,start,end):
13
+	#definan el algoritmo de ordenamiento mergesort
14
+	return lista
15
+
16
+def heapSort(lista):
17
+	#definan el algoritmo de ordenamiento heapsort
18
+	return lista
19
+
20
+def quickSort(lista):
21
+	#definan el algoritmo de ordenamiento quicksort
22
+	elements = len(lista)
23
+    
24
+	#Base case
25
+	if elements < 2:
26
+		return lista
27
+    
28
+	current_position = 0        #Position of the partitioning element
29
+
30
+	for i in range(1, elements):        #Partitioning loop
31
+		if lista[i] <= lista[0]:
32
+			current_position += 1
33
+			temp = lista[i]
34
+			lista[i] = lista[current_position]
35
+			lista[current_position] = temp
36
+
37
+	temp = lista[0]
38
+	lista[0] = lista[current_position] 
39
+	lista[current_position] = temp          #Brings pivot to it's appropriate position
40
+    
41
+	left = quickSort(lista[0:current_position])         #Sorts the elements to the left of pivot
42
+	right = quickSort(lista[current_position+1:elements])       #sorts the elements to the right of pivot
43
+
44
+	lista = left + [lista[current_position]] + right        #Merging everything together
45
+	return lista
46
+
47
+def shellSort(lista):
48
+	#definan el algoritmo de ordenamiento shellsort
49
+	return lista
50
+
51
+maxValor=1000 	#define el valor maximo de los elementos de la lista
52
+largoLista=1000 #define el largo de las listas a ordenar
53
+veces=100 		#define las veces que se va a hacer el ordenamiento 
54
+
55
+acumulaMerge=0 	#variable para acumular el tiempo de ejecucion del mergesort
56
+acumulaHeap=0 	#variable para acumular el tiempo de ejecucion del heapsort
57
+acumulaQuick=0 	#variable para acumular el tiempo de ejecucion del quicksort
58
+acumulaShell=0 	#variable para acumular el tiempo de ejecucion del shellsort
59
+
60
+for i in range(veces):
61
+	mergelista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
62
+	heaplista=list(mergelista)
63
+	quicklista=list(mergelista)
64
+	searchlista=list(mergelista)
65
+
66
+	t1 = time.process_time()					#tomamos el tiempo inicial
67
+	mergeSort(mergelista,0,len(mergelista)-1) 	#ejecutamos el algoritmo mergeSort
68
+	acumulaMerge+=time.process_time() - t1		#acumulamos el tiempo de ejecucion
69
+
70
+	t1 = time.process_time()				#tomamos el tiempo inicial
71
+	heapSort(heaplista)					    #ejecutamos el algoritmo heapSort
72
+	acumulaHeap+=time.process_time() - t1 	#acumulamos el tiempo de ejecucion
73
+
74
+	t1 = time.process_time()				#tomamos el tiempo inicial
75
+	quickSort(quicklista)					#ejecutamos el algoritmo quickSort
76
+	acumulaQuick+=time.process_time() - t1	#acumulamos el tiempo de ejecucion
77
+
78
+	t1 = time.process_time()				#tomamos el tiempo inicial
79
+	shellSort(searchlista)					#ejecutamos el algoritmo shellSort
80
+	acumulaShell+=time.process_time() - t1	#acumulamos el tiempo de ejecucion
81
+
82
+#imprimos los resultados
83
+print ("Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista))
84
+print ("MergeSort " + str(acumulaMerge/veces) + " segundos")
85
+print ("HeapSort " + str(acumulaHeap/veces) + " segundos")
86
+print ("QuickSort " + str(acumulaQuick/veces) + " segundos")
87
+print ("ShellSort " + str(acumulaShell/veces) + " segundos")