用python要求利用递归函数完成归并排序,测试数据自定,但应测试到尽可能多的情况,比如初始逆序,初始局部有序,初始乱序等等。 【题目描述】归并排序是一种基于归并算法的排序方法,该方法采用分治策略:先将待排序的序列划分成若干长度为1的子序列,即假设待排序数据有n个,则认为初始有n段序列,每段长度为1,接下来两两合并,且合并后的每段内从小到大有序,以此类推……,直到只剩下1段序列为止。 【测试数据】 序列初始长度应分别测试奇数个和偶数个; 序列初始顺序应至少测试初始基本有序,初始逆序,初始乱序; 可以使用文件存储初始测试数据,文件可以是1个或多个。
时间: 2023-12-14 10:03:02 浏览: 73
好的,以下是用 Python 实现归并排序的代码,这里针对不同类型的测试数据做了处理。
```
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
merge_sort(left_half)
merge_sort(right_half)
i, j, k = 0, 0, 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
arr[k] = left_half[i]
i += 1
else:
arr[k] = right_half[j]
j += 1
k += 1
while i < len(left_half):
arr[k] = left_half[i]
i += 1
k += 1
while j < len(right_half):
arr[k] = right_half[j]
j += 1
k += 1
return arr
```
接下来是测试数据的生成代码,生成的数据存储在一个文件中。
```
import random
# 生成初始基本有序序列
arr1 = list(range(1, 101))
for i in range(10):
start = i * 10
end = start + 10
arr1[start:end] = sorted(arr1[start:end])
# 生成初始逆序序列
arr2 = list(range(100, 0, -1))
# 生成初始局部有序序列
arr3 = list(range(1, 101))
for i in range(10):
start = i * 10
end = start + 10
arr3[start:end] = sorted(arr3[start:end], reverse=True)
# 生成初始乱序序列
arr4 = [random.randint(1, 100) for _ in range(100)]
# 将四个序列合并为一个序列
arr = arr1 + arr2 + arr3 + arr4
# 打乱序列顺序
random.shuffle(arr)
# 将序列写入文件
with open('test_data.txt', 'w') as f:
f.write(' '.join(map(str, arr)))
```
以上代码可以生成一个长度为 400 的测试数据文件,包含初始基本有序序列、初始逆序序列、初始局部有序序列和初始乱序序列。可以根据需要修改序列的长度和文件名。
阅读全文