Python实现归并排序的两种方法

来源:互联网 发布:江滨观邸11#网络备案 编辑:程序博客网 时间:2024/05/20 00:38

第一种

#归并排序(递归)的python实现def merge(li,p,q,r):    n1 = q - p + 1    n2 = r - q    L = []    R = []    for i in range(n1):        L.append(li[p+i])    for j in range(n2):        R.append(li[q+1+j])    i = 0    j = 0    k = p    while i<len(L) and j<len(R):        if L[i]<R[j]:            li[p] = L[i]            p += 1            i += 1        else:            li[p] = R[j]            p += 1            j += 1    if i<len(L):        li[p] = L[i]        i += 1        p += 1    if j<len(R):        li[p] = R[j]        p += 1        j += 1def MergeSort(li, p, r):    if p < r:        q = int((p+r)/2)        MergeSort(li, p, q)        MergeSort(li, q+1, r)        merge(li, p, q, r)if __name__ == '__main__':    l = [3,41,52,26,38,57,9,49]    MergeSort(l,0,len(l)-1)    print(l)

第二种

#Python实现归并排序def Merge(left, right):    li = []    i = 0    j = 0    while i<len(left) and j<len(right):        if left[i] < right[j]:            li.append(left[i])            i += 1        else:            li.append(right[j])            j += 1    if i<len(left):        li = li + left[i:]    if j<len(right):        li = li + right[j:]    return lidef MergeSort(li):    if len(li)<=1:        return li    q = int(len(li)/2)    ll = MergeSort(li[:q])    rr = MergeSort(li[q:])    lll = Merge(ll,rr)    return lllli = [3,41,52,26,38,57,9,49]print(MergeSort(li))print(li)
0 0
原创粉丝点击