在Python中查找具有k个合并排序调用的数组

假设我们有两个数字a和b,我们必须找到一个数组,该数组包含[1,a]范围内的值,并且需要b数量的递归合并排序函数调用。

因此,如果输入像a = 10,b = 15,那么输出将是[3,1,4,6,2,8,5,9,10,7]

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个功能solve()。这将需要left,right,array,b

  • 如果b <1或left + 1与right相同,则

    • 返回

  • b:= b-2

  • 中:=(左+右)/ 2

  • temp:= array [mid-1]

  • array [mid-1]:= array [mid]

  • array [mid]:=临时

  • 解决(左,中,数组,b)

  • 解决(中,右,数组,b)

  • 从主要方法中执行以下操作-

  • 如果b mod 2与0相同,则

    • 显示“无”

    • 返回

  • array:=大小为n + 1的数组,并用0填充

  • 数组[0]:= 1

  • 对于范围1到a的我,做

    • array [i]:= i + 1

  • b:= b-1

  • resolve(0,a,数组,b)

  • 返回数组,一个

示例

让我们看下面的实现以更好地理解-

def solve(left,right,array,b):
   if (b < 1 or left + 1 == right):
      return
   b -= 2
   mid = (left + right) // 2
   temp = array[mid - 1]
   array[mid-1] = array[mid]
   array[mid] = temp
   solve(left, mid, array, b)
   solve(mid, right, array, b)
def find_arr(a,b):
   if (b % 2 == 0):
      print("None")
      return
   array = [0 for i in range(a + 2)]
   array[0] = 1
   for i in range(1, a):
      array[i] = i + 1
   b -=1
   solve(0, a, array, b)
return array, a
a = 10
b = 15
array, size = find_arr(a, b)
print(array[:size])

输入项

10,15

输出结果

[3, 1, 4, 6, 2, 8, 5, 9, 10, 7]
猜你喜欢