No Description

sorting.py 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #coding=utf-8
  2. """
  3. Grupo: JoJaJuDie == *ACUERDENSE DE PONER SUS NOMBRES COMPLETOS*
  4. Diego A. Rodriguez Agueros
  5. Javier
  6. Luis Jusino
  7. Joel
  8. *Referencias incluidas al final del códogo*
  9. """
  10. """
  11. Carlos J Corrada Bravo
  12. Este programa calcula el promedio de tiempo de ejecución de cuatro algoritmos de ordenamiento
  13. La variable maxValor define el valor maximo de los elementos de la lista
  14. La variable largoLista define el largo de las listas a ordenar
  15. La variable veces define las veces que se va a hacer el ordenamiento
  16. Al final se imprimen los promedios de cada algortimo
  17. """
  18. from random import randint
  19. import time
  20. def mergeSort(listaMerge):
  21. #definan el algoritmo de ordenamiento mergesort
  22. return lista
  23. # Credito de esta función incluida al final del código
  24. def heapify(listaHeap, largoLista, i):
  25. largest = i
  26. left = 2 * i + 1
  27. right = 2 * i + 2
  28. if left < largoLista and listaHeap[i] < listaHeap[left]:
  29. largest = left
  30. if right < largoLista and listaHeap[largest] < listaHeap[right]:
  31. largest = right
  32. if largest != i:
  33. listaHeap[i], listaHeap[largest] = listaHeap[largest], listaHeap[i]
  34. heapify(listaHeap, largoLista, largest)
  35. # Credito de esta función incluida al final del código
  36. def heapSort(listaHeap):
  37. #definan el algoritmo de ordenamiento heapsort
  38. for i in range(len(listaHeap) / 2, -1, -1):
  39. heapify(listaHeap, len(listaHeap), i)
  40. for i in range(len(listaHeap) - 1, 0, -1):
  41. listaHeap[i], listaHeap[0] = listaHeap[0], listaHeap[i]
  42. heapify(listaHeap, i, 0)
  43. return listaHeap
  44. def quickSort(lista):
  45. #definan el algoritmo de ordenamiento quicksort
  46. return lista
  47. def shellSort(lista):
  48. #definan el algoritmo de ordenamiento shellsort
  49. return lista
  50. maxValor=1000 #define el valor maximo de los elementos de la lista
  51. largoLista=1000 #define el largo de las listas a ordenar
  52. veces=100 #define las veces que se va a hacer el ordenamiento
  53. acumulaMerge=0 #variable para acumular el tiempo de ejecucion del mergesort
  54. acumulaHeap=0 #variable para acumular el tiempo de ejecucion del heapsort
  55. acumulaQuick=0 #variable para acumular el tiempo de ejecucion del quicksort
  56. acumulaShell=0 #variable para acumular el tiempo de ejecucion del shellsort
  57. for i in range(veces):
  58. #Creamos una lista con valores al azar
  59. lista = [randint(0,maxValor) for r in range(largoLista)]
  60. listaMerge = lista[:]
  61. listaHeap = lista[:]
  62. listaQuick = lista[:]
  63. listaShell = lista[:]
  64. t1 = time.clock() #seteamos el tiempo al empezar
  65. mergeSort(listaMerge) #ejecutamos el algoritmo mergeSort
  66. acumulaMerge+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  67. t1 = time.clock() #seteamos el tiempo al empezar
  68. heapSort(listaHeap) #ejecutamos el algoritmo heapSort
  69. acumulaHeap+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  70. t1 = time.clock() #seteamos el tiempo al empezar
  71. quickSort(listaQuick) #ejecutamos el algoritmo quickSort
  72. acumulaQuick+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  73. t1 = time.clock() #seteamos el tiempo al empezar
  74. shellSort(listaShell) #ejecutamos el algoritmo shellSort
  75. acumulaShell+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  76. #imprimos los resultados
  77. print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
  78. print "MergeSort " + str(acumulaMerge/veces) + " segundos"
  79. print "HeapSort " + str(acumulaHeap/veces) + " segundos"
  80. print "QuickSort " + str(acumulaQuick/veces) + " segundos"
  81. print "ShellSort " + str(acumulaShell/veces) + " segundos"
  82. """
  83. Referencias:
  84. https://www.geeksforgeeks.org/heap-sort/
  85. https://www.programiz.com/dsa/heap-sort
  86. """