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
  • 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)
  • 從主方法執行以下操作:
  • 如果b mod 2與0相同,則
    • 顯示“None”
    • 返回
  • array := 一個大小為n + 1的陣列,並填充0
  • array[0] := 1
  • 對於範圍從1到a的i,執行
    • array[i] := i + 1
  • b := b - 1
  • solve(0, a, array, b)
  • 返回array,a

示例

讓我們看看以下實現以更好地理解:

 線上演示

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]

更新於:2020年8月28日

83 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.