解释此合并排序代码中L和R的范围?

2024-09-24 22:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

def mergeSort(arr): 
if len(arr) >1: 
    mid = len(arr)//2 # Finding the mid of the array 
    L = arr[:mid] # Dividing the array elements  
    R = arr[mid:] # into 2 halves 

    
    mergeSort(L) # Sorting the first half 
    mergeSort(R) # Sorting the second half 

    i = j = k = 0
      
    # Copy data to temp arrays L[] and R[] 
    while i < len(L) and j < len(R): 
        if L[i] < R[j]: 
            arr[k] = L[i] 
            i+= 1
        else: 
            arr[k] = R[j] 
            j+= 1
        k+= 1
      
    # Checking if any element was left 
    while i < len(L): 
        arr[k] = L[i] 
        i+= 1
        k+= 1
      
    while j < len(R): 
        arr[k] = R[j] 
        j+= 1
        k+= 1
    return arr

尽管L和R是自变量,但它们的值如何随递归函数中L和R值的变化而变化?有人能详细解释一下吗


Tags: andofthelenifdefarrayarr
1条回答
网友
1楼 · 发布于 2024-09-24 22:19:26

在python中,列表是一个可变对象,因此这里L和R是通过引用传递的,甚至不需要末尾的“return arr”。这意味着即使通过递归函数调用也会修改列表。 使用调试器,研究合并排序算法拆分每个项目并开始排序的关键时刻,您将更好地了解它的工作原理

但是代码的缩进有问题。您需要在函数声明下缩进所有代码,除了return

相关问题 更多 >