2 of 4
make change explicit
Sᴀᴍ Onᴇᴌᴀ
  • 20906
  • 12
  • 30
  • 131

Thanks to Toby now the program takes:

--- 7.169409990310669 seconds to finish the program--- instead of --- 186.7168517112732 seconds--- for 100 milion numbers.

One other improvement I made was to add an extra optimization on the random generating algorithm, using numpy. So numpy.sort() was used to sort the numpy array, because it is faster for numpy arrays.

###Code

import time
import numpy

start_time0 = time.time()


def median(values):
    sortedlist =  numpy.sort(values)
    length = len(sortedlist)
    half = length // 2

    if length % 2 == 0:
        return (sortedlist[half] + sortedlist[half - 1]) // 2
    else:
        return sortedlist[half]


def main():

    m, n = 1000, 100000000
    # Random Number Generator
    start_time = time.time()
    data = numpy.random.randint(1, m, n)
    print("--- %s seconds to numpy random---" % (time.time() - start_time))
    # Median
    start_time = time.time()
    result = median(data)
    print("Result: ", result)
    print("--- %s seconds to find the Median---" % (time.time() - start_time))


if __name__ == "__main__":

    main()
    print("--- %s seconds to finish the program---" % (time.time() - start_time0))