1. 实现合并排序算法。要排序的整型数Q组元素可以用随机数生成器生成,运行程序,分别记录对十万,一百万,五千万,一千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果。
时间: 2024-09-28 07:04:46 浏览: 31
合并排序是一种分治策略的经典例子,它将待排序数组分成两半,递归地对每半进行排序,然后合并两个有序部分。以下是合并排序的基本步骤:
1. **分割**:将输入数组分为两个相等的部分,如果数组长度不是偶数,则取最接近的整数。
2. **递归**:对这两个子数组分别进行同样的操作,直到每个子数组只有一个元素。
3. **合并**:当子数组长度为1时,它们已经是有序的。然后将两个已排序的子数组合并成一个有序数组。这一步通过比较两个子数组的第一个元素,并选择较小的那个添加到结果数组中,同时移动指向下一个未添加元素的位置。
对于时间复杂度,合并排序总是O(n log n),不受输入数据的影响,因此对于大量数据,如十万、百万、五千万或一千万个整数,其性能稳定。
为了计算所需时间并制作表格,你可以按照以下步骤操作:
1. 使用Python或其他支持高精度时间测量的语言编写一个函数,用于执行合并排序并测量时间。
2. 对于每个数据量范围,创建相应的随机数列表并多次运行排序,取平均值以减少误差。
3. 记录每次排序的时间,并将其存储在一个字典或类似的数据结构中,键是数据量,值是平均时间。
4. 另外,单独对100个数据进行排序,展示整个过程。
下面是一个简单的Python示例:
```python
import random
import time
def merge_sort(arr):
# ... (实际的合并排序实现)
# 测试代码
data_sizes = [100000, 1000000, 5000000, 10000000]
time_results = {}
for size in data_sizes:
arr = [random.randint(0, size) for _ in range(size)]
start_time = time.time()
merge_sort(arr)
end_time = time.time()
time_taken = end_time - start_time
time_results[size] = time_taken
# 打印时间结果表
for size, time in time_results.items():
print(f"排序{size}个元素用了: {time:.6f}秒")
# 单独展示100个数据排序结果
arr_100 = [random.randint(0, 100) for _ in range(100)]
print(f"排序100个数据用了: {merge_sort(arr_100):.6f}秒")
```
记得在实际测试时,由于计算机性能差异,可能会有所浮动,所以多次实验并取平均值可以得到更准确的结果。
阅读全文