1.实现合并排序算法。要排序的整型数组元素可以用随机数生成器生成,运行程序,分别记录对十万,一百万,五千万,一千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果。
时间: 2024-12-28 19:40:16 浏览: 12
合并排序是一种基于分治策略的排序算法,其基本思想是将数组不断二分,然后对每半部分进行排序,最后合并已排序的部分。以下是实现合并排序的一个简单步骤:
1. **分割数组**:首先,将输入数组分成两个相等或接近相等的子数组。
2. **递归排序**:对每个子数组进行同样的操作,直到子数组只剩下一个元素,这视为已经排序。
3. **合并子数组**:将两个已排序的子数组合并成一个大的有序数组。这一步通过比较两个子数组的第一个元素并选择较小的那个放入新数组中完成,同时移动对应的指针。
4. **回溯**:当所有子数组合并完毕,原始数组就被排序好了。
为了测量不同规模数据的排序时间,你可以使用以下Python代码示例:
```python
import time
import random
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
return merge(merge_sort(left_half), merge_sort(right_half))
def merge(left, right):
merged = []
left_index = right_index = 0
while left_index < len(left) and right_index < len(right):
if left[left_index] < right[right_index]:
merged.append(left[left_index])
left_index += 1
else:
merged.append(right[right_index])
right_index += 1
# 添加剩余部分
merged.extend(left[left_index:])
merged.extend(right[right_index:])
return merged
# 测试大数组排序
data_sizes = [100000, 1000000, 5000000, 10000000]
times = []
for size in data_sizes:
arr = [random.randint(0, 10**6) for _ in range(size)]
start_time = time.time()
sorted_arr = merge_sort(arr)
end_time = time.time()
times.append(end_time - start_time)
print(f"排序时间 (单位:秒):")
for i, size in enumerate(data_sizes):
print(f"{size}: {times[i]}")
# 小数组排序示例
small_arr = [random.randint(0, 99) for _ in range(100)]
start_time = time.time()
sorted_small_arr = merge_sort(small_arr)
end_time = time.time()
print(f"100个元素排序时间: {end_time - start_time}")
```
注意,实际运行此代码会需要一些时间,并且结果可能会因为计算机性能和操作系统等因素而有所差异。运行这个程序,你会得到排序时间和100个元素排序的结果。
阅读全文