跟我一起学 - 算法导论 - 递归式

简介:

#  encoding: utf-8  
arr = []
def  printTree():
    ac 
=  []
    ii 
=  0 
    
for  r  in  arr :
        c,ss,cc 
=  r 
        sc 
=  [ '   '   for  i  in  xrange(cc * (c - 1 ))]
        
for  i  in  xrange(len(sc)) :
            
if  i  %  cc  ==  0 : sc[i] = " "  
        
# print "ci %s ii %s = %s "%(ci,ii,ii < ci)
         if  ii >= c  : 
            sc 
=   "" .join(sc) + " ├─ " + ss + '    '
        
else  :
            sc 
=   "" .join(sc) + " └─ " + ss
        ii 
=  c
        ac.append( sc )
        
    
for  r  in  ac[:: - 1 ] :
        
print  r
    

def  MERGE(A,p,q,r):
    
# print "%s:%s - %s:%s" % (p,q+1,q+1,r+1)
     if  p == q : L  =  [A[p], 10 ** 10 ]
    
else  : L  =  A[p:q + 1 ] + [ 10 ** 10 ]

    
if  q + 1 == r : R  =  [A[r], 10 ** 10 ]
    
else  : R  =  A[q + 1 :r + 1 ] + [ 10 * 10 ]

    i 
=  j  =  0
    
for  k  in  xrange(p,r + 1 ):
        
if  L[i] < R[j] :
            A[k]
= L[i]
            i
+= 1
        
else :
            A[k]
= R[j]
            j
+= 1
    
#  print "%s:%s = %s \n%s:%s = %s\n\n%s" % ( p,q, L , q+1,r,R, A)


def  MERGE_SORT(A,p,r,c = 1 ):
    
if  p < r:
        q 
=  (p + r) / 2
        MERGE_SORT(A,p,q,c
+ 1 )
        MERGE_SORT(A,q
+ 1 ,r,c + 1 )
        arr.append( (c,
" %s - %s "   %  ( A[p:q + 1 ],A[q + 1 :r + 1 ]) ,  3  ) )
        
#  Debugging(A,p,q,r, sc )
        MERGE(A,p,q,r)

A
= [ 5 , 2 , 7 , 4 , 1 , 3 , 2 , 6 ]
MERGE_SORT(A,0,len(A)
- 1 )
print  A
printTree() 


输出 (重下往上看  输出 排序过程 ,我就不多说了 应该很好理解了!!):
[1, 2, 2, 3, 4, 5, 6, 7]
├─[2, 4, 5, 7] - [1, 2, 3, 6]
│  ├─[1, 3] - [2, 6]
│  │  ├─[2] - [6]
│  │  └─[1] - [3]
│  ├─[2, 5] - [4, 7]
│  │  ├─[7] - [4]
│  │  └─[5] - [2]


本文转自博客园刘凯毅的博客,原文链接:跟我一起学 - 算法导论 - 递归式,如需转载请自行联系原博主。




目录
相关文章
|
1月前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
51 2
|
6月前
|
算法 C++
算法笔记:递归(c++实现)
算法笔记:递归(c++实现)
|
2月前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
36 1
|
6月前
|
存储 算法 程序员
数据结构与算法===递归
数据结构与算法===递归
|
2月前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
53 0
|
4月前
|
算法
【算法】递归、搜索与回溯——汉诺塔
【算法】递归、搜索与回溯——汉诺塔
|
5月前
|
算法 Python
python中算法递归错误(Recursion Errors)
【7月更文挑战第18天】
89 1
|
4月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
110 0
|
4月前
|
算法
【算法】递归、搜索与回溯——简介
【算法】递归、搜索与回溯——简介
|
6月前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
132 7