Merge Sort 给定不同规模的随机数组,利用merge sort排序对其进行排序,记录运行时间并分析其随数据量变化的表现。
时间: 2024-11-27 14:08:16 浏览: 36
Merge Sort 是一种非常高效的分治算法,用于对数组或列表进行排序。它的基本思想是将原始数组不断地二分,直到每个子数组只剩下一个元素,然后逐层合并这些已排序的小数组,最终得到完全有序的序列。
以下是 Merge Sort 的主要步骤:
1. **分割(Divide)**:如果数组长度大于1,将其一分为二,分别递归地对两个半数组进行排序。
2. **合并(Combine)**:将排序后的两半数组合并成一个完整的有序数组。这一步通过比较两个子数组的元素,把较小的元素添加到结果数组,直到其中一个子数组被消耗完,然后将另一个子数组的剩余元素添加到结果。
这是一个递归过程,直到整个数组只有一个元素时,递归结束。
**代码示例(Python)**:
```python
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):
merged = []
i = j = 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
merged.append(left[i])
i += 1
else:
merged.append(right[j])
j += 1
merged.extend(left[i:])
merged.extend(right[j:])
return merged
# 示例
arr = [random.sample(range(100), size) for size in range(10, 1001, 10)] # 随机生成不同大小的数组
start_time = time.time()
sorted_arrs = [merge_sort(arr) for arr in arr]
end_time = time.time()
total_time = end_time - start_time
print("Sorted arrays in", total_time, "seconds")
# 分析性能
times = [time.time() - start_time for start_time in [time.time()] + [time[0] for time in zip(start_time, sorted_arrs[:-1])]]
average_time_per_arr = sum(times) / len(times)
max_time, min_time, median_time = times.max(), times.min(), times[len(times) // 2] if len(times) % 2 == 1 else (times[len(times) // 2 - 1], times[len(times) // 2])
print(f"Average time per array: {average_time_per_arr} seconds")
print(f"Max time: {max_time} seconds, Min time: {min_time} seconds")
print(f"Median time: {median_time} seconds")
```
**相关问题--:**
1. Merge Sort是如何划分和合并数组的?
2. 该算法的时间复杂度是多少?
3. 对于大规模数据,Merge Sort相比于其他排序算法有何优势?
4. 如何改进这个代码以优化性能?
阅读全文