Advertisement
MiguelazoDS

Untitled

Sep 11th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.64 KB | None | 0 0
  1. import sys, time, random
  2.  
  3. #La función merge comienza con una comparación entre dos listas de
  4. #tamaño 1. Las listas sucesivas que recibe luego están ordenadas
  5. def merge(izq, der):
  6.     lst_ord = []
  7.     ind_izq = ind_der = 0
  8.     while ind_izq < len(izq) and ind_der < len(der):
  9.         if izq[ind_izq] <= der[ind_der]:
  10.             lst_ord.append(izq[ind_izq])
  11.             ind_izq += 1
  12.         else:
  13.             lst_ord.append(der[ind_der])
  14.             ind_der += 1
  15.     if ind_izq == len(izq):
  16.         lst_ord.extend(der[ind_der:])
  17.     else:
  18.         lst_ord.extend(izq[ind_izq:])
  19.     return lst_ord
  20.  
  21. #Divide una lista hasta que obtiene solo un elemento y envía ese valor a "merge"
  22. def mergesort(lst):
  23.     if len(lst) > 1:
  24.         ind = len(lst)//2
  25.         mitad_izq = lst[:ind]
  26.         mitad_der = lst[ind:]
  27.         return merge(mergesort(mitad_izq),mergesort(mitad_der))
  28.     else:
  29.         return lst
  30.  
  31. def main():
  32.     #Tamaño por defecto de la lista
  33.     N=1000000
  34.     #Comprueba que se haya pasado un parámetro
  35.     if len(sys.argv) > 1:
  36.         #Si es un número genera la lista entre 0 y 1000 de N elementos
  37.         if sys.argv[1].isdigit():
  38.             N = int(sys.argv[1])
  39.             lista = [random.randint(0,1000) for i in range(N)]
  40.             print ("Se generó una lista aleatoria de %d elementos" % (N))
  41.         #Si no es un número sale del programa
  42.         else:
  43.             print ("El valor ingresado no es un número")
  44.             exit(1)
  45.     start = time.time()
  46.     mergesort(lista)
  47.     final = time.time() - start
  48.     print ("El algoritmo demoró %f segundos" % (final))
  49.  
  50. if __name__ == '__main__':
  51.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement