I am trying to capture the wall clock time, CPU time, and complexity of quick, selection, and bubble sorts, but I don’t think that my timing outputs at the bottom are correct/plausible. Is there anything in my measurement function that stands out as problematic? My sorts work as intended, so I didn’t include them to reduce the length here.
import random
import time
def generate_random_array(size):
return [random.randint(1, 1000) for _ in range(size)]
def bubble_sort(array):
pass
def selection_sort(array):
pass
def quick_sort(array):
pass
def measure_sorting_time_and_complexity(sort_func, array):
wall_start = time.time()
cpu_start = time.process_time()
complexity = sort_func(array)
wall_end = time.time()
cpu_end = time.process_time()
wall_time = wall_end - wall_start
cpu_time = (cpu_end - cpu_start) * 1000 # Convert to milliseconds
return complexity, wall_time, cpu_time
array_sizes = [1000]
for size in array_sizes:
print(f”Creating an array of size {size}”)
array = generate_random_array(size)
# Measure and print Bubble Sort performance
print("*** Bubble Sort ***")
bubble_complexity, bubble_wall_time, bubble_cpu_time = measure_sorting_time_and_complexity(bubble_sort, array.copy())
print(f"Execution time: {bubble_cpu_time:.6f} milliseconds")
print(f"Wallclock time: {bubble_wall_time:.6f} seconds")
print(f"Complexity: {bubble_complexity}")
# Measure and print Selection Sort performance
print("*** Selection Sort ***")
selection_complexity, selection_wall_time, selection_cpu_time = measure_sorting_time_and_complexity(selection_sort, array.copy())
print(f"Execution time: {selection_cpu_time:.6f} milliseconds")
print(f"Wallclock time: {selection_wall_time:.6f} seconds")
print(f"Complexity: {selection_complexity}")
# Measure and print Quick Sort performance
print("*** Quicksort (Recursive) ***")
quick_complexity, quick_wall_time, quick_cpu_time = measure_sorting_time_and_complexity(quick_sort, array.copy())
print(f"Execution time: {quick_cpu_time:.6f} milliseconds")
print(f"Wallclock time: {quick_wall_time:.6f} seconds")
print(f"Complexity: {quick_complexity}")
Output Below
Creating an array of size 1000
*** Bubble Sort ***
Execution time: 46.875000 milliseconds
Wallclock time: 125.370979 seconds
Complexity: 762366
*** Selection Sort ***
Execution time: 15.625000 milliseconds
Wallclock time: 63.345432 seconds
Complexity: 500500
*** Quicksort (Recursive) ***
Execution time: 0.000000 milliseconds
Wallclock time: 0.000000 seconds
Complexity: 31635