สมมติว่าเรามีตัวเลข a และ b สองตัว เราต้องหาอาร์เรย์ที่มีค่าอยู่ในช่วง [1, a] และต้องการจำนวน b ของฟังก์ชันการเรียงลำดับการผสานแบบเรียกซ้ำ
ดังนั้น หากอินพุตเป็น a =10, b =15 ผลลัพธ์จะเป็น [3,1,4,6,2,8,5,9,10,7]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน Solve() นี่จะใช้เวลาซ้าย ขวา อาร์เรย์ b
- ถ้า b <1 หรือซ้าย + 1 เหมือนกับขวา แล้ว
- คืนสินค้า
- b :=b - 2
- กลาง :=(ซ้าย + ขวา) / 2
- temp :=array[mid - 1]
- array[mid-1] :=array[กลาง]
- อาร์เรย์[กลาง] :=อุณหภูมิ
- แก้ (ซ้าย กลาง อาร์เรย์ b)
- แก้(กลาง ขวา อาร์เรย์ b)
- จากวิธีหลัก ให้ทำดังนี้ -
- ถ้า b mod 2 เหมือนกับ 0 แล้ว
- แสดง "ไม่มี"
- คืนสินค้า
- array :=อาร์เรย์ขนาด n + 1 และเติมด้วย 0
- array[0] :=1
- สำหรับฉันในช่วง 1 ถึง a ทำ
- array[i] :=i + 1
- b :=b - 1
- แก้(0, a, อาร์เรย์, b)
- ส่งคืนอาร์เรย์ 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]