No Description

sorting.py 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. """
  2. iiiiCarlos J Corrada Bravo
  3. Este programa calcula el promedio de tiempo de ejecución 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. def mergeSort(lista):
  12. #Camila Vazquez Rodriguez
  13. #definan el algoritmo de ordenamiento mergesort
  14. if len(lista) > 1:
  15. mid = len(lista)//2
  16. L = lista[:mid]
  17. R = lista[mid:]
  18. mergeSort(L)
  19. mergeSort(R)
  20. i = 0
  21. j = 0
  22. k = 0
  23. while i < len(L) and j < len(R):
  24. if L[i] <= R[j]:
  25. lista[k] = L[i]
  26. i += 1
  27. else:
  28. lista[k] = R[j]
  29. j += 1
  30. k += 1
  31. while i < len(L):
  32. lista[k] = L[i]
  33. i += 1
  34. k += 1
  35. while j < len(R):
  36. lista[k] = R[j]
  37. j += 1
  38. k += 1
  39. return lista
  40. def heapSort(lista):
  41. #definan el algoritmo de ordenamiento heapsort
  42. """
  43. Carlos Hernández
  44. Implementación de heapSort.
  45. """
  46. def max_heapify(lista, idx, heap_size):
  47. """Convertir el nodo `idx` y sus descendientes en un max heap."""
  48. left_idx = 2 * idx + 1
  49. right_idx = 2 * idx + 2
  50. largestval_idx = idx
  51. if left_idx < heap_size and lista[idx] < lista[left_idx]:
  52. largestval_idx = left_idx
  53. if right_idx < heap_size and lista[largestval_idx] < lista[right_idx]:
  54. largestval_idx = right_idx
  55. if largestval_idx != idx:
  56. lista[idx], lista[largestval_idx] = lista[largestval_idx], lista[idx]
  57. max_heapify(lista, largestval_idx, heap_size)
  58. def build_max_heap(lista, heap_size):
  59. """Construir un max heap the un heap dado."""
  60. for idx in range((heap_size - 1) // 2, -1, -1):
  61. max_heapify(lista, idx, heap_size)
  62. heap_size = len(lista)
  63. build_max_heap(lista, heap_size)
  64. for idx in range(len(lista) - 1, 0, -1):
  65. lista[0], lista[idx] = lista[idx], lista[0]
  66. heap_size -= 1
  67. max_heapify(lista, 0, heap_size)
  68. return lista
  69. def quickSort(lista):
  70. #definan el algoritmo de ordenamiento quicksort
  71. return lista
  72. def shellSort(lista):
  73. #definan el algoritmo de ordenamiento shellsort
  74. return lista
  75. maxValor=1000 #define el valor maximo de los elementos de la lista
  76. largoLista=1000 #define el largo de las listas a ordenar
  77. veces=100 #define las veces que se va a hacer el ordenamiento
  78. acumulaMerge=0 #variable para acumular el tiempo de ejecucion del mergesort
  79. acumulaHeap=0 #variable para acumular el tiempo de ejecucion del heapsort
  80. acumulaQuick=0 #variable para acumular el tiempo de ejecucion del quicksort
  81. acumulaShell=0 #variable para acumular el tiempo de ejecucion del shellsort
  82. for i in range(veces):
  83. lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
  84. t1 = time.clock() #seteamos el tiempo al empezar
  85. mergeSort(lista) #ejecutamos el algoritmo mergeSort
  86. acumulaMerge+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  87. t1 = time.clock() #seteamos el tiempo al empezar
  88. heapSort(lista) #ejecutamos el algoritmo heapSort
  89. acumulaHeap+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  90. t1 = time.clock() #seteamos el tiempo al empezar
  91. quickSort(lista) #ejecutamos el algoritmo quickSort
  92. acumulaQuick+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  93. t1 = time.clock() #seteamos el tiempo al empezar
  94. shellSort(lista) #ejecutamos el algoritmo shellSort
  95. acumulaShell+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  96. #imprimos los resultados
  97. print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
  98. print "MergeSort " + str(acumulaMerge/veces) + " segundos"
  99. print "HeapSort " + str(acumulaHeap/veces) + " segundos"
  100. print "QuickSort " + str(acumulaQuick/veces) + " segundos"
  101. print "ShellSort " + str(acumulaShell/veces) + " segundos"