是否存在应该使用递归合并排序而不是迭代合并排序的情况?最初,我认为合并排序的迭代方法通常更快,尽管我无法在自己的实现中证明这一点。但是递归会对堆栈进行更多的调用,这反过来又降低了内存效率。如果我有一个非常大的数据集需要排序怎么办?那么使用递归不是很糟糕吗?因为过度深度的递归最终不会导致堆栈溢出吗?如果递归速度较慢且内存效率较低,为什么还要使用递归而不是迭代呢?
def merge_sort(arr):
if len(arr) <= 1:
return arr
current_size = 1
while current_size < len(arr):
left = 0
while left < len(arr)-1:
mid = left + current_size - 1
right = min((left + 2*current_size - 1), (len(arr)-1))
merged_arr = merge(arr[left : mid + 1], arr[mid + 1 : right + 1])
for i in range(left, right + 1):
arr[i] = merged_arr[i - left]
left = left + current_size*2
current_size = current_size * 2
return arr
def merge(left, right):
result …Run Code Online (Sandbox Code Playgroud)