归并排序算法

所谓归并排序,其实就是将一个数组分成等分两个相等的数组,然后对这两个数组都做同样的排序操作,再将两个数组结合起。实际是一个递归的过程
那么这个结合是怎么样的操作?
举例左数组为经过排序操作等于【3,4】,右数组等于【1,2】,那么 这个数组本应是【3,4,1,2】,如何使之变成【1,2,3,4】呢?
事实上,这是两个有序的数组,我们只须不断地比较两个数组各自的第一个,取出最小的加入新数组,直到两个数组再也没有元素。这样就完成了排序

a=[6,2,3,9,2,1,5,6,19,87,65,65,21,35,75,82,59,62]
def merge(left,right):
    ret=[]
    j=0
    k=0
    while(j<len(left) and k<len(right)):
        if left[j]<right[k]:
            temp=left[j]
            j+=1
        else:
            temp=right[k]
            k+=1
        ret.append(temp)
    while(j<len(left)):
        ret.append(left[j])
        j+=1
    while(k<len(right)):
        ret.append(right[k])
        k+=1
    return ret


def mergeSort(a):
    if len(a)<2:
        return a
    l=len(a)
    left=a[:l/2]
    right=a[l/2:]

    return merge(mergeSort(left),mergeSort(right))


print mergeSort(a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值