Brak opisu

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. from random import randint
  10. import time
  11. def mergeSort(lista):
  12. #definan el algoritmo de ordenamiento mergesort
  13. return lista
  14. def heapSort(lista):
  15. #definan el algoritmo de ordenamiento heapsort
  16. return lista
  17. def quickSort(lista):
  18. #definan el algoritmo de ordenamiento quicksort
  19. return lista
  20. def shellSort(lista):
  21. #definan el algoritmo de ordenamiento shellsort
  22. Size = len(lista) # Contains the complete size of the list
  23. Diff = Size/2 # Contains the number of half of the list
  24. # Does a insertion sort by ordering in base of the Diff.
  25. while Diff > 0:
  26. # Begins a loop to sort the elements added to sorted array.
  27. for i in range(Diff, Size):
  28. # Saves the element sorted in a temporary variable
  29. Tmp = lista[i]
  30. j = i # Shifts the location of the elements
  31. # Looks for the locations
  32. while j >= Diff and lista[j - Diff] > Tmp:
  33. # Gives the new element to the location
  34. lista[j] = lista[j - Diff]
  35. # The size of the array is ajusted
  36. j -= Diff
  37. # Puts the Tmp variable in is correct location
  38. lista[j] = Tmp
  39. # Reduces again the list
  40. Diff /= 2
  41. return lista
  42. # Code was taken from GeeksforGeeks
  43. maxValor=1000 #define el valor maximo de los elementos de la lista
  44. largoLista=1000 #define el largo de las listas a ordenar
  45. veces=100 #define las veces que se va a hacer el ordenamiento
  46. acumulaMerge=0 #variable para acumular el tiempo de ejecucion del mergesort
  47. acumulaHeap=0 #variable para acumular el tiempo de ejecucion del heapsort
  48. acumulaQuick=0 #variable para acumular el tiempo de ejecucion del quicksort
  49. acumulaShell=0 #variable para acumular el tiempo de ejecucion del shellsort
  50. for i in range(veces):
  51. mergelista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
  52. heaplista=list(mergelista)
  53. quicklista=list(mergelista)
  54. searchlista=list(mergelista)
  55. t1 = time.clock() #seteamos el tiempo al empezar
  56. mergeSort(mergelista) #ejecutamos el algoritmo mergeSort
  57. acumulaMerge+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  58. t1 = time.clock() #seteamos el tiempo al empezar
  59. heapSort(heaplista) #ejecutamos el algoritmo heapSort
  60. acumulaHeap+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  61. t1 = time.clock() #seteamos el tiempo al empezar
  62. quickSort(quicklista) #ejecutamos el algoritmo quickSort
  63. acumulaQuick+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  64. t1 = time.clock() #seteamos el tiempo al empezar
  65. shellSort(searchlista) #ejecutamos el algoritmo shellSort
  66. acumulaShell+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  67. #imprimos los resultados
  68. print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
  69. print "MergeSort " + str(acumulaMerge/veces) + " segundos"
  70. print "HeapSort " + str(acumulaHeap/veces) + " segundos"
  71. print "QuickSort " + str(acumulaQuick/veces) + " segundos"
  72. print "ShellSort " + str(acumulaShell/veces) + " segundos"