欢迎光临散文网 会员登陆 & 注册

python排序算法-(5)归并排序

2023-06-18 08:51 作者:仿真资料吧  | 我要投稿

归并排序算法的时间复杂度为O(nlogn),是一种高效的排序算法。 合并排序算法的核心思想是将一个大的数组分成两个较小的数组,递归地对这两个较小的数组进行排序,最后合并回原来的数组。


import random

# 归并函数
def merge(arr, l, m, r):
    # 创建两个零数组
    n1 = m - l + 1
    n2 = r - m
    L = [0] * (n1)
    R = [0] * (n2)

    # 复制数组元素
    for i in range(0, n1):
        L[i] = arr[l + i]
    for j in range(0, n2):
        R[j] = arr[m + 1 + j]

    # 合并子数组
    i = 0  # 第一个子数组的初始索引
    j = 0  # 第二个子数组的初始索引
    k = l  # 合并后的子数组的初始索引

    while i < n1 and j < n2:
        if L[i] <= R[j]:
            arr[k] = L[i]
            i += 1
        else:
            arr[k] = R[j]
            j += 1
        k += 1

    # 复制L剩余的元素(如果有)
    while i < n1:
        arr[k] = L[i]
        i += 1
        k += 1

    # 复制R剩余的元素(如果有)
    while j < n2:
        arr[k] = R[j]
        j += 1
        k += 1

# 归并排序函数
def mergeSort(arr, l, r):
    if l < r:
        m = (l+r)//2
        # 对左右两个子数组进行递归排序
        mergeSort(arr, l, m)
        mergeSort(arr, m + 1, r)
        # 合并左右两个有序子数组
        merge(arr, l, m, r)

# 测试
array=random.sample(range(0, 100), 50)
print("原始数组为:")
print(array)

size = len(array)
mergeSort(array,0,size-1)

print('归并排序后的数组为:')
print(array)

运行环境:python3.8

运行结果:

原始数组为:

[97, 11, 56, 36, 31, 48, 98, 34, 1, 55, 91, 58, 63, 46, 26, 68, 96, 10, 65, 72, 77, 6, 86, 92, 99, 51, 89, 64, 67, 87, 23, 21, 9, 70, 57, 2, 61, 75, 37, 74, 30, 20, 8, 41, 94, 15, 53, 33, 12, 44]

归并排序后的数组为:

[1, 2, 6, 8, 9, 10, 11, 12, 15, 20, 21, 23, 26, 30, 31, 33, 34, 36, 37, 41, 44, 46, 48, 51, 53, 55, 56, 57, 58, 61, 63, 64, 65, 67, 68, 70, 72, 74, 75, 77, 86, 87, 89, 91, 92, 94, 96, 97, 98, 99]



python排序算法-(5)归并排序的评论 (共 条)

分享到微博请遵守国家法律