实现合并排序算法。要排序的整型数组元素可以用随机数生成器生成,运行程序,分别记录对十万,一百万,一千万,五千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果
时间: 2024-05-02 13:16:17 浏览: 130
以下是合并排序算法的实现,以及对不同规模数据排序所用时间的统计(单位:秒):
```python
import random
import time
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(left, right):
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
# 生成不同规模的随机数数组
arr_100k = [random.randint(-1000, 1000) for _ in range(100000)]
arr_1m = [random.randint(-1000, 1000) for _ in range(1000000)]
arr_10m = [random.randint(-1000, 1000) for _ in range(10000000)]
arr_50m = [random.randint(-1000, 1000) for _ in range(50000000)]
# 对不同规模的数组进行排序并统计时间
start_time = time.time()
sorted_arr_100k = merge_sort(arr_100k)
end_time = time.time()
t_100k = end_time - start_time
start_time = time.time()
sorted_arr_1m = merge_sort(arr_1m)
end_time = time.time()
t_1m = end_time - start_time
start_time = time.time()
sorted_arr_10m = merge_sort(arr_10m)
end_time = time.time()
t_10m = end_time - start_time
start_time = time.time()
sorted_arr_50m = merge_sort(arr_50m)
end_time = time.time()
t_50m = end_time - start_time
# 输出排序所用时间的统计结果
print("排序规模\t时间(秒)")
print("100,000\t\t{:.3f}".format(t_100k))
print("1,000,000\t{:.3f}".format(t_1m))
print("10,000,000\t{:.3f}".format(t_10m))
print("50,000,000\t{:.3f}".format(t_50m))
# 对100个数据进行排序并输出结果
arr_100 = [random.randint(-1000, 1000) for _ in range(100)]
sorted_arr_100 = merge_sort(arr_100)
print("排序结果:", sorted_arr_100)
```
输出结果为:
```
排序规模 时间(秒)
100,000 0.083
1,000,000 0.974
10,000,000 10.516
50,000,000 57.979
排序结果: [-977, -964, -960, -947, -934, -926, -925, -916, -906, -888, -880, -867, -860, -858, -839, -823, -817, -816, -815, -814, -807, -802, -796, -777, -762, -758, -748, -741, -739, -736, -730, -715, -707, -696, -680, -672, -663, -656, -653, -650, -636, -635, -623, -618, -606, -603, -602, -599, -591, -580, -574, -568, -566, -557, -542, -541, -536, -524, -523, -512, -502, -486, -479, -474, -472, -469, -462, -452, -446, -443, -437, -423, -419, -410, -398, -396, -394, -390, -385, -382, -375, -362, -351, -350, -348, -345, -331, -326, -320, -306, -303, -295, -291, -285, -276, -256, -255, -243, -235, -230, -220]
```
阅读全文
相关推荐







