Ingen beskrivning

sorting.py 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. """
  2. Carlos 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. #Defini esta funcion de swap para facilitarme este paso del sort.
  12. #Lo pueden usar si quieren.
  13. def swap(lista, posicion1, posicion2):
  14. tmp = lista[posicion1]
  15. lista[posicion1] = lista[posicion2]
  16. lista[posicion2] = tmp
  17. def mergeSort(lista):
  18. #definan el algoritmo de ordenamiento mergesort
  19. return lista
  20. def heapSort(lista):
  21. #definan el algoritmo de ordenamiento heapsort
  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. #Variable para saber cuando el sort termina
  29. termine = False
  30. #Variable para el tamaño de la lista.
  31. n = len(lista)
  32. #Variable para la mitad del tamaño de la lista.
  33. k = int(n/2)
  34. #Variables para realizar las comparaciones de los elementos.
  35. i = 0
  36. j = k
  37. #Ciclo donde se realiza el ShellSort.
  38. while(termine == False):
  39. #Comparacion de elementos para ver si se puede hacer un swap.
  40. if(lista[i] > lista[j]):
  41. swap(lista, i, j)
  42. #Variables para retener el valor original de x, y para continuar el sort.
  43. tmp1 = i
  44. tmp2 = j
  45. #Ciclo para realizar swaps en elementos anteriores luego de encontrar un swap.
  46. while True:
  47. #Verificacion para prevenir que se busquen elementos fuera de la lista.
  48. if((i-k) >= 0):
  49. i = i - k
  50. j = j -k
  51. else:
  52. i = tmp1
  53. j = tmp2
  54. break
  55. #Verificacion si se puede hacer otro swap.
  56. if(lista[i] > lista[j]):
  57. swap(lista, i , j)
  58. else:
  59. i = tmp1
  60. j = tmp2
  61. break
  62. #Estos ajustes se utilizan para continuar verificando elementos
  63. #mas adelantes en la lista.
  64. i = i + 1
  65. j = j + 1
  66. else:
  67. #Estos ajustes se utilizan para continuar verificando elementos
  68. #mas adelantes en la lista.
  69. i = i + 1
  70. j = j + 1
  71. #Verifica antes de salirse de la lista para poder comenzar otra vuelta con k/2.
  72. if(j == n)
  73. k = int(k/2)
  74. i = 0
  75. j = k
  76. #Identifica cuando el sort se supone que haya terminado.
  77. if(k == 0)
  78. termine = True
  79. return lista
  80. maxValor=1000 #define el valor maximo de los elementos de la lista
  81. largoLista=1000 #define el largo de las listas a ordenar
  82. veces=100 #define las veces que se va a hacer el ordenamiento
  83. acumulaMerge=0 #variable para acumular el tiempo de ejecucion del mergesort
  84. acumulaHeap=0 #variable para acumular el tiempo de ejecucion del heapsort
  85. acumulaQuick=0 #variable para acumular el tiempo de ejecucion del quicksort
  86. acumulaShell=0 #variable para acumular el tiempo de ejecucion del shellsort
  87. for i in range(veces):
  88. lista = [randint(0,maxValor) for r in range(largoLista)] #creamos una lista con valores al azar
  89. t1 = time.clock() #seteamos el tiempo al empezar
  90. mergeSort(lista) #ejecutamos el algoritmo mergeSort
  91. acumulaMerge+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  92. t1 = time.clock() #seteamos el tiempo al empezar
  93. heapSort(lista) #ejecutamos el algoritmo heapSort
  94. acumulaHeap+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  95. t1 = time.clock() #seteamos el tiempo al empezar
  96. quickSort(lista) #ejecutamos el algoritmo quickSort
  97. acumulaQuick+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  98. t1 = time.clock() #seteamos el tiempo al empezar
  99. shellSort(lista) #ejecutamos el algoritmo shellSort
  100. acumulaShell+=time.clock()-t1 #acumulamos el tiempo de ejecucion
  101. #imprimos los resultados
  102. print "Promedio de tiempo de ejecucion de "+ str(veces) +" listas de largo " + str(largoLista)
  103. print "MergeSort " + str(acumulaMerge/veces) + " segundos"
  104. print "HeapSort " + str(acumulaHeap/veces) + " segundos"
  105. print "QuickSort " + str(acumulaQuick/veces) + " segundos"
  106. print "ShellSort " + str(acumulaShell/veces) + " segundos"