算法:归并排序

一、简介

  归并排序使用分治法的思想。分治法将原问题分解为几个规模较小但类似于原问题的子问题。现在很多有用的算法结构上都是递归的,为了解决某一个问题,算法调用自身来解决紧密相关的若干子问题。
  分治法每层递归时都有三个步骤:
  分解:将原问题分解为若干的子问题,这些子问题都是原问题规模较小的实现。
  解决:这些子问题,递归地求解各子问题。
  合并:这些子问题的解成原问题的解。

二、算法简介

  分解:归并排序算法,将待排序的元素序列分成各具有n/2个元素的两个子序列。
  解决:使用排序递归地排序两个子序列
  合并:最后合并两个已排序的子序列以产生已排序的答案。

三、算法实现

#归并排序
def merge(A, p, q, r):
    L = A[p:q]
    R = A[q:r]
    L.append(float("inf"))  #float("inf")是无穷大的意思
    R.append(float("inf"))
    i, j, k = 0, 0, p
    length = r
    print L, R
    while k < r:
        if L[i] <= R[j]:
            A[k] = L[i]
            i += 1
        else:
            A[k] = R[j]
            j += 1
        k += 1
    return A
#递归调用
def merge_sort(A, p, r):
    if p+1 < r:
        if (p + r)%2 == 0:
            q = (p + r ) / 2
        else:
            q = (p + r)/2 + 1
        merge_sort(A, p, q)
        merge_sort(A, q, r)
        merge(A, p, q, r)

参考文献:

1、算法导论
2、python核心编程 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值