mirror of
https://litchi.icu/ngc2207/algorithm.git
synced 2025-05-18 19:16:32 +00:00
62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
|
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")
|