python归并排序,从小到大

归并排序和快速排序有一定相似,快速排序是将原始数组依据 mid_value 值,逐渐拆分至每一个元素,而归并排序是首先将数组迭代拆分,拆分至每一个元素后,再将左右元素相互比较,之后逐渐将小数组段拼接起来。

假设一个数组为 array=[1,5,3,8,4,8,2,2]
首先对该数组进行拆分,第一次拆分:
left_array = [1,5,3,8]
right_array = [4,8,2,2]
第二次拆分:
left_array = [1,5]
right_array = [3,8]
第三次拆分:
left_array = [1]
right_array = [5]

拆分完成,对第三次拆分后的数组执行如下操作:

    left = 0
    right = 0
    result = []
    while left < len(left_array) and right < len(right_array):
        if left_array[left] < right_array[right]:
            result.append(left_array[left])
            left = left + 1
        else:
            result.append(right_array[right])
            right = right + 1
    result += left_array[left:]
    result += right_array[right:]
    return result

所得 result = [1,5]
迭代就是对 [3]、[8]、[1,5]、[3,8]、[4]、[8]、[2]、[2]、[4,8]、[2,2]、[1,3,5,8]、[2,2,4,8] 依次执行上述步骤

完整程序如下:

import random


def merge_sort(array):
    L = len(array)
    n=L//2
    if n < 1:
        return array
    left_array = merge_sort(array[:n])
    right_array = merge_sort(array[n:])
    left = 0
    right = 0
    result = []
    while left < len(left_array) and right < len(right_array):
        if left_array[left] < right_array[right]:
            result.append(left_array[left])
            left = left + 1
        else:
            result.append(right_array[right])
            right = right + 1
    result += left_array[left:]
    result += right_array[right:]
    return result


if __name__ == '__main__':
    a=range(1,11)
    array = random.sample(a,8)
    print(array)
    array_sort = merge_sort(array)
    print(array_sort)

这次使用了新的生成随机数的方法,因为原先采用 np.random.randint( ) 函数时,所生成的结果 array 是 ndarray 类型,并不能使用列表的 + 方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值