【发布时间】:2015-10-25 06:22:58
【问题描述】:
我编写了以下 python 脚本,该脚本使用分治法(递归调用)对数组的元素进行排序。我的一位朋友建议递归比迭代慢。 有没有办法将下面的程序转换为“for”循环并仍然利用分而治之的策略。即使列表包含很多元素,迭代是否会击败递归?
### Using recursion
import random
from datetime import datetime
start = str(datetime.now().time()).split(':')
def quicksort(A,first,last):
print "calling parameters",A,first,last
if first >= last:
return
i , j = first, last
pivot = A[random.randint(first,last)]
#pivot = A[last]
while i <= j:
while A[i] < pivot:
i+=1
#print "i:",i
while A[j] > pivot:
j-=1
#print "i,j",i,j
if i <= j:
A[i],A[j] = A[j],A[i]
i,j = i+1, j-1
#print "intermediate",A
#print "loop i,j",i,j
# Using Recursion here
quicksort(A,first,j)
quicksort(A,i,last)
A = [2,8,7,1,3,5,6,4]
#A = [1,1,1,1,1,1,1,1]
quicksort(A,0,len(A)-1)
print A
stop = str(datetime.now().time()).split(':')
print "time taken",float(stop[2]) - float(start[2])
【问题讨论】:
-
你确定这段代码能正常工作吗?您的方法结束时有两个调用 - 只有一个实际正在执行。
-
他们都被调用了。一个用参数 A,first,j 调用,第二个用参数 A,i,last 调用
-
一旦第一个被调用,第二行永远不会执行。就像有两个 return 语句。
-
@Burhan。你是不正确的。第一个完成后,它返回到代码中的那个位置。然后执行第二个调用。 return 语句是相关的,但功能不同。
标签: python recursion iteration quicksort