归并算法和二分查找是加深对递归思想理解的很好的算法,两者可以结合着看,二分查找是进入函数都先做逻辑处理,然后再进行下一轮递归,递归到条件满足后逐层推出函数。
归并排序是进入函数后先递归进入下一层函数,直到递归到条件满足后逐层推出函数,推出函数前进行逻辑处理。
def guibing(data, l, r):
if(l < r):
m = (l+r)/2
guibing(data, l, m)
guibing(data, m+1, r)
tmp = [x for x in data]
lt = m
rt = r
while(lt >= l and rt > m):
if(tmp[lt] > tmp[rt]):
data[r] = tmp[lt]
r -= 1
lt -= 1
else:
data[r] = tmp[rt]
r -= 1
rt -= 1
while(lt >= l):
data[r] = tmp[lt]
r -= 1
lt -= 1
while(rt > m):
data[r] = tmp[rt]
r -= 1
rt -= 1
else:
return