以下是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

# 生成随机数据
def generate_data(n):
    return [random.randint(1, 10000) for _ in range(n)]

# 测试函数
def test(n):
    arr = generate_data(n)
    start_time = time.time()
    arr = merge_sort(arr)
    end_time = time.time()
    assert arr == sorted(arr)
    return end_time - start_time

# 绘制图表
import matplotlib.pyplot as plt

x = [64, 128, 256, 512, 1024, 2048, 4096, 8192]
y = [test(n) for n in x]
plt.plot(x, y)
plt.xlabel('Input Size')
plt.ylabel('Time (s)')
plt.title('Merge Sort')
plt.show()

运行结果如下图所示:

merge-sort

从上图可以看出,随着输入规模的增加,归并排序的运行时间呈线性增长趋势,这与归并排序算法的时间复杂度O(n log n)相符。

归并排序时间复杂度分析:Python实现及运行时间曲线图

原文地址: https://www.cveoy.top/t/topic/f2fa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录