暂无描述

sorting.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. def mergeSort(lista):
  12. return lista
  13. def heapSort(lista):
  14. #trabajado por Andrel Fuentes
  15. #definan el algoritmo de ordenamiento heapsort
  16. #crear el "max heap"
  17. for i in range(largoLista // 2, -1, -1):
  18. heapify(lista, largoLista, i)
  19. for i in range(largoLista - 1, 0, -1):
  20. lista[i], lista[0] = lista[0], lista[i]
  21. heapify(lista, i, 0)
  22. return lista
  23. def quickSort(lista):
  24. #definan el algoritmo de ordenamiento quicksort
  25. return lista
  26. def shellSort(lista):
  27. #definan el algoritmo de ordenamiento shellsort
  28. return lista
  29. #######################################################################################
  30. def heapify(lista, largo, raiz):
  31. #trabajado por Andrel Fuentes
  32. #encontrar cual el valor mayor entre de los hijos y raiz
  33. #define las posiciones de los hijos
  34. largest_value = raiz
  35. left_child = raiz * 2 + 1
  36. right_child = raiz * 2 + 2
  37. #se verifica si el hijo izquierdo es mayor, actualizar variable de mayor
  38. #si fuera necesario
  39. if left_child < largoLista and lista[left_child] > lista[raiz]:
  40. largest_value = left_child
  41. #se verifica si el hijo derecho es mayor, actualizar variable de mayor
  42. #si fuera necesario
  43. if right_child < largoLista and lista[right_child] > lista[largest_value]:
  44. largest_value = right_child
  45. #se verifica si la posicion inicial sigue siendo la misma/mayor, swap si necesario
  46. #y continuar con heapify
  47. if largest_value != raiz:
  48. lista[raiz], lista[largest_value] = lista[largest_value], lista[raiz]
  49. heapify(lista, largo, largest_value)
  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. acumulaMerge=0 #variable para acumular el tiempo de ejecucion del mergesort
  55. acumulaHeap=0 #variable para acumular el tiempo de ejecucion del heapsort
  56. acumulaQuick=0 #variable para acumular el tiempo de ejecucion del quicksort
  57. acumulaShell=0 #variable para acumular el tiempo de ejecucion del shellsort
  58. for i in range(veces):
  59. mergelista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
  60. heaplista=list(mergelista)
  61. quicklista=list(mergelista)
  62. searchlista=list(mergelista)
  63. t1 = time.process_time() #seteamos el tiempo al empezar
  64. mergeSort(mergelista) #ejecutamos el algoritmo mergeSort
  65. acumulaMerge+=time.process_time()-t1 #acumulamos el tiempo de ejecucion
  66. t1 = time.process_time() #seteamos el tiempo al empezar
  67. heapSort(heaplista) #ejecutamos el algoritmo heapSort
  68. acumulaHeap+=time.process_time()-t1 #acumulamos el tiempo de ejecucion
  69. t1 = time.process_time() #seteamos el tiempo al empezar
  70. quickSort(quicklista) #ejecutamos el algoritmo quickSort
  71. acumulaQuick+=time.process_time()-t1 #acumulamos el tiempo de ejecucion
  72. t1 = time.process_time() #seteamos el tiempo al empezar
  73. shellSort(searchlista) #ejecutamos el algoritmo shellSort
  74. acumulaShell+=time.process_time()-t1 #acumulamos el tiempo de ejecucion
  75. #imprimos los resultados
  76. print ("Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista))
  77. print ("MergeSort " + str(acumulaMerge/veces) + " segundos")
  78. print ("HeapSort " + str(acumulaHeap/veces) + " segundos")
  79. print ("QuickSort " + str(acumulaQuick/veces) + " segundos")
  80. print ("ShellSort " + str(acumulaShell/veces) + " segundos")