在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)
从主要方法中执行以下操作-
如果bmod2与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]