from random import random
from time import perf_counter

from sorting import *

def generate_random_list(n):
	lst = []
	for i in range(n):
		lst.append(random())
	return lst

def time_algorithm(algorithm, n, repetitions):
	# generate random lists
	lists = []
	for i in range(repetitions):
		lst = generate_random_list(n)
		lists.append(lst)
	
	# measure running time
	start_time = perf_counter()
	for lst in lists:
		# run the algorithm
		algorithm(lst)
	end_time = perf_counter()
	
	# return average in milliseconds
	return 1000 * (end_time - start_time) / repetitions

def vary_list_length(algorithm, max_n, step_size, repetitions):
	# print headers, tab-separated
	print('n', 'average time (ms)', sep='\t')
	
	for n in range(0, max_n+1, step_size):
		t = time_algorithm(algorithm, n, repetitions)
		# print results, tab-separated
		print(n, t, sep='\t')
