Untitled

 avatar
unknown
plain_text
5 months ago
2.1 kB
3
Indexable
import time
import random
import matplotlib.pyplot as plt
from sorting import bubble_sort, quick_sort, insertion_sort


def measure_time(function, arr):
    start = time.time()
    function(arr.copy())
    end = time.time()
    return end - start

def generate_arrays(size, case_type):
    if case_type == "best":
        arr = sorted(range(size))
    elif case_type == "worst":
        arr = sorted(range(size), reverse=True)
    else:  # average case
        arr = random.sample(range(size * 10), size)
    return arr

def experiment(algorithm, min_size, max_size, num_repetitions):
    results = {"average": [], "best": [], "worst": []}
    for size in range(min_size, max_size + 1, 10):  #
        for case in results.keys():
            total_time = 0
            for _ in range(num_repetitions):
                arr = generate_arrays(size, case)
                total_time += measure_time(algorithm, arr)
            average_time = total_time / num_repetitions
            results[case].append(average_time)
    return results
    
def plot_results(algorithm_name, results, min_size, max_size):
    sizes = list(range(min_size, max_size + 1, 10))

    plt.figure()
    plt.plot(sizes, results["average"], label=f"{algorithm_name} (průměr)", marker='o')
    plt.plot(sizes, results["best"], label=f"{algorithm_name} (nejlepší)", marker='o')
    plt.plot(sizes, results["worst"], label=f"{algorithm_name} (nejhorší)", marker='o')

    plt.xlabel("Velikost pole")
    plt.ylabel("Čas (sekundy)")
    plt.title(f"Čas běhu {algorithm_name}")
    plt.legend()
    plt.grid(True, linestyle='--', linewidth=0.5)
    plt.show()

min_size = 10
max_size = 1000
num_repetitions = 15
algorithms = [bubble_sort, insertion_sort, quick_sort]

# Run the experiment and plot results for each algorithm
for algorithm in algorithms:
    algorithm_name = algorithm.__name__.replace("_", " ").title()
    results = experiment(algorithm, min_size, max_size, num_repetitions)
    plot_results(algorithm_name, results, min_size, max_size)
Editor is loading...
Leave a Comment