Computer >> Máy Tính >  >> Lập trình >> Python

Tìm mảng có k số lệnh gọi sắp xếp hợp nhất trong Python

Giả sử chúng ta có hai số a và b, chúng ta phải tìm một mảng chứa các giá trị trong phạm vi [1, a] và yêu cầu chính xác b số lệnh gọi của hàm sắp xếp hợp nhất đệ quy.

Vì vậy, nếu đầu vào là a =10, b =15, thì đầu ra sẽ là [3,1,4,6,2,8,5,9,10,7]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm giải quyết (). Thao tác này sẽ chuyển sang trái, phải, mảng, b
  • nếu b <1 hoặc left + 1 giống với phải thì
    • trở lại
  • b:=b - 2
  • giữa:=(trái + phải) / 2
  • temp:=array [mid - 1]
  • array [mid-1]:=array [giữa]
  • array [mid]:=temp
  • giải quyết (trái, giữa, mảng, b)
  • giải quyết (giữa, phải, mảng, b)
  • Từ phương thức chính, hãy làm như sau -
  • nếu b mod 2 giống 0, thì
    • hiển thị "Không có"
    • trở lại
  • array:=một mảng có kích thước n + 1 và điền bằng 0
  • mảng [0]:=1
  • đối với tôi trong phạm vi từ 1 đến a, thực hiện
    • mảng [i]:=i + 1
  • b:=b - 1
  • giải quyết (0, a, mảng, b)
  • trả về mảng, a

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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])

Đầu vào

10,15

Đầu ra

[3, 1, 4, 6, 2, 8, 5, 9, 10, 7]