मान लीजिए कि हमारे पास दो नंबर ए और बी हैं, हमें रेंज [1, ए] में मानों वाली एक सरणी ढूंढनी है और रिकर्सिव मर्ज सॉर्ट फ़ंक्शन की बिल्कुल बी संख्या की कॉल की आवश्यकता है।
इसलिए, यदि इनपुट a =10, b =15 जैसा है, तो आउटपुट [3,1,4,6,2,8,5,9,10,7]
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को हल करें() परिभाषित करें। यह बाएँ, दाएँ, सरणी, b लेगा
- यदि b <1 या बायां + 1 दाएं के समान है, तो
- वापसी
- b :=b - 2
- मध्य :=(बाएं + दाएं) / 2
- अस्थायी:=सरणी[मध्य -1]
- सरणी[मध्य-1] :=सरणी[मध्य]
- सरणी[मध्य] :=अस्थायी
- हल करें (बाएं, मध्य, सरणी, बी)
- समाधान (मध्य, दाएं, सरणी, बी)
- मुख्य विधि से निम्न कार्य करें -
- यदि b mod 2 0 के समान है, तो
- "कोई नहीं" प्रदर्शित करें
- वापसी
- सरणी:=आकार n + 1 की एक सरणी, और 0 से भरें
- सरणी[0] :=1
- मैं के लिए 1 से ए की सीमा में, करते हैं
- सरणी[i] :=i + 1
- b :=b - 1
- समाधान (0, ए, सरणी, बी)
- रिटर्न ऐरे, 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]