Nenhuma descrição

sorting.py 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. import time
  10. from random import randint
  11. import heap
  12. # Python program for implementation of MergeSort
  13. # Merges two subarrays of arr[].
  14. # First subarray is arr[l..m]
  15. # Second subarray is arr[m+1..r]
  16. def mergeSort(lista, l, r):
  17. # definan el algoritmo de ordenamiento mergesort
  18. return lista
  19. def heapSort(lista):
  20. n = len(lista)
  21. h1 = (n // 2) - 1
  22. for i in range(h1, -1, -1):
  23. heap.heapify(lista, n, i)
  24. h2 = n - 1
  25. for i in range(h2, 0, -1):
  26. lista[i], lista[0] = lista[0], lista[i]
  27. heap.heapify(lista, 0, i)
  28. return lista
  29. def quickSort(lista):
  30. #definan el algoritmo de ordenamiento quicksort
  31. return lista
  32. def shellSort(lista):
  33. #definan el algoritmo de ordenamiento shellsort
  34. return lista
  35. maxValor=1000 #define el valor maximo de los elementos de la lista
  36. largoLista=1000 #define el largo de las listas a ordenar
  37. veces=100 #define las veces que se va a hacer el ordenamiento
  38. acumulaMerge=0 #variable para acumular el tiempo de ejecucion del mergesort
  39. acumulaHeap=0 #variable para acumular el tiempo de ejecucion del heapsort
  40. acumulaQuick=0 #variable para acumular el tiempo de ejecucion del quicksort
  41. acumulaShell=0 #variable para acumular el tiempo de ejecucion del shellsort
  42. for i in range(veces):
  43. mergelista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
  44. heaplista=list(mergelista)
  45. quicklista=list(mergelista)
  46. searchlista=list(mergelista)
  47. t1 = time.process_time() #tomamos el tiempo inicial
  48. mergeSort(mergelista,0,len(mergelista)-1) #ejecutamos el algoritmo mergeSort
  49. acumulaMerge+=time.process_time() - t1 #acumulamos el tiempo de ejecucion
  50. print(mergelista) #desplegamos la lista
  51. t1 = time.process_time() #tomamos el tiempo inicial
  52. heapSort(heaplista) #ejecutamos el algoritmo heapSort
  53. acumulaHeap+=time.process_time() - t1 #acumulamos el tiempo de ejecucion
  54. print(heaplista) #desplegamos la lista
  55. t1 = time.process_time() #tomamos el tiempo inicial
  56. quickSort(quicklista) #ejecutamos el algoritmo quickSort
  57. acumulaQuick+=time.process_time() - t1 #acumulamos el tiempo de ejecucion
  58. print(quicklista) #desplegamos la lista
  59. t1 = time.process_time() #tomamos el tiempo inicial
  60. shellSort(searchlista) #ejecutamos el algoritmo shellSort
  61. acumulaShell+=time.process_time() - t1 #acumulamos el tiempo de ejecucion
  62. print(searchlista) #desplegamos la lista
  63. #imprimos los resultados
  64. print ("Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista))
  65. print ("MergeSort " + str(acumulaMerge/veces) + " segundos")
  66. print ("HeapSort " + str(acumulaHeap/veces) + " segundos")
  67. print ("QuickSort " + str(acumulaQuick/veces) + " segundos")
  68. print ("ShellSort " + str(acumulaShell/veces) + " segundos")