【数据结构算法】:Python实现归并排序

动图展示

算法时间复杂度o(n*logn)

python

归并的思路在于先分再和,分的过程如下:
先将数组进行一半一半的拆分,直到不能再拆分未知。

之后进行合并的操作,这个合并的操作主要是合并另个有序数组。我们先比较两个有序数组的第一个元素,将小的放到一个空数组中,然后将这个小的数据原始所在的那个数组的指针往后移一个。继续与另一个数组进行比较,继续将小的放到空数组的下一个中。直到任何一个数组全部的元素出完之后,将另一个数组的所有元素放到空数组接下来的位置。

def merge(left_arr, right_arr);
    empty = []
    left_index = right_index = 0
    #当两个数组都有元素的时候
    while left_index < len(left_arr) and right_index < len(right_arr):
        if left_arr[left_index] < right_arr[right_index]:
            empty.append(left_arr[left_index])
            left_index += 1
        else:
            empty.append(right_arr[right_index])
            right_index+= 1

    #当left数组的元素归并完了
    if left_index == len(left_arr):
        for num in right_arr[right_index:]:
            empty.append(num)

    #当right数组的元素归并完了
    else:
        for num in left_arr[left_index:]:
        empty.append(num)

def merge_sort(arr):
    if len(arr)<=1:
        return arr
    middle_index = len(arr)/2
    left_arr = merge_sort(arr[:middle_index])
    right_arr = merge_sort(arr[middle_index:])
    return merge(left_arr, right_arr)


if __name__ == '__main__':
    arr = [1,3,5,7,9,2,8,0,-1,-2]
    output = merge_sort(arr)
    print output
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanCruise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值