用python要求利用递归函数完成归并排序,测试数据自定,但应测试到尽可能多的情况,比如初始逆序,初始局部有序,初始乱序等等。 【题目描述】归并排序是一种基于归并算法的排序方法,该方法采用分治策略:先将待排序的序列划分成若干长度为1的子序列,即假设待排序数据有n个,则认为初始有n段序列,每段长度为1,接下来两两合并,且合并后的每段内从小到大有序,以此类推……,直到只剩下1段序列为止。 【测试数据】 序列初始长度应分别测试奇数个和偶数个; 序列初始顺序应至少测试初始基本有序,初始逆序,初始乱序; 可以使用文件存储初始测试数据,文件可以是1个或多个。
时间: 2023-12-08 21:06:59 浏览: 82
好的,以下是用 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
```
接下来是测试数据的生成代码,生成的数据分别存储到三个文件中,分别为“ordered.txt”(初始基本有序)、“reversed.txt”(初始逆序)和“random.txt”(初始乱序)。
```
import random
# 生成初始基本有序序列
ordered_arr = list(range(1, 101))
for i in range(10):
start = i * 10
end = start + 10
ordered_arr[start:end] = sorted(ordered_arr[start:end])
with open('ordered.txt', 'w') as f:
f.write(' '.join(map(str, ordered_arr)))
# 生成初始逆序序列
reversed_arr = list(range(100, 0, -1))
with open('reversed.txt', 'w') as f:
f.write(' '.join(map(str, reversed_arr)))
# 生成初始乱序序列
random_arr = [random.randint(1, 100) for _ in range(100)]
with open('random.txt', 'w') as f:
f.write(' '.join(map(str, random_arr)))
```
以上代码可以生成三个长度为 100 的测试数据,分别为初始基本有序序列、初始逆序序列和初始乱序序列。可以根据需要修改序列的长度和文件名。
阅读全文