import argparse import random import time def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left_half = merge_sort(arr[:mid]) right_half = merge_sort(arr[mid:]) return merge(left_half, right_half) def merge(left, right): sorted_array = [] left_index, right_index = 0, 0 while left_index < len(left) and right_index < len(right): if left[left_index] < right[right_index]: sorted_array.append(left[left_index]) left_index += 1 else: sorted_array.append(right[right_index]) right_index += 1 sorted_array.extend(left[left_index:]) sorted_array.extend(right[right_index:]) return sorted_array if __name__ == '__main__': parser = argparse.ArgumentParser(description='Merge Sort with random array generation.') parser.add_argument('--length', type=int, default=10, help='Length of the random array to generate (default: 10)') parser.add_argument('--min', type=int, default=1, help='Minimum value for random numbers (default: 1)') parser.add_argument('--max', type=int, default=100, help='Maximum value for random numbers (default: 100)') args = parser.parse_args() start_time = time.time() generate_start_time = time.time() arr = [random.randint(args.min, args.max) for _ in range(args.length)] generate_end_time = time.time() print(f"Original array: {arr}") sort_start_time = time.time() sorted_arr = merge_sort(arr) sort_end_time = time.time() print(f"Sorted array: {sorted_arr}") end_time = time.time() generate_time = generate_end_time - generate_start_time sort_time = sort_end_time - sort_start_time total_time = end_time - start_time print(f"Time taken to generate data: {generate_time:.6f} seconds") print(f"Time taken to sort data: {sort_time:.6f} seconds") print(f"Total time taken: {total_time:.6f} seconds")