Python 归并算法的递归分析

mac2024-03-22  27

最近在学python,推荐一下学习的网站:https://github.com/jackfrued/Python-100-Days

在Day16-20中,有一个归并算法的代码把我搞得头大,下面贴出代码:

def select_sort(items, comp=lambda x, y: x <= y): if len(items)<2 : return items[:] mid =len(items)//2 left =select_sort(items[:mid]) print(left) right = select_sort(items[mid:]) print(right) return merge(left,right,comp) def merge(items1,items2,comp): items=[] index1,index2=0,0 while index1<len(items1) and index2<len(items2): if comp(items1[index1],items2[index2]): items.append(items1[index1]) index1+=1 else: items.append(items2[index2]) index2 +=1 items += items1[index1:] items += items2[index2:] return items def main(): origin_items=[10,1,6,7,42,34,12,77,15,3] new_items =select_sort(origin_items) print(new_items) if __name__ == '__main__': main()

其中left 和 right 都涉及到递归,print出的结果很费解,但我自己用的是sublime编写python,所以在我同学的电脑用pycharm进行了debug,建议如果递归过程不明白的还是用debug.....总的思想就是不断地拆分,阻塞,直到不可分,进行比较,依次再解决阻塞,最后合并(每一个递归的小过程都是这么解决的)建议debug看一下详细过程

最新回复(0)