Pythonでk個のマージソート呼び出しを含む配列を検索する
2つの数値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
- mid:=(左+右)/ 2
- temp:=array [mid-1]
- array [mid-1]:=array [mid]
- array [mid]:=temp
- solve(左、中央、配列、b)
- solve(mid、right、array、b)
- メインメソッドから次の手順を実行します-
- b mod 2が0と同じ場合、
- 「なし」を表示
- 戻る
- array:=サイズn + 1の配列で、0で埋めます
- array [0]:=1
- 1からaの範囲のiについては、
- array [i]:=i + 1
- b:=b-1
- resolve(0、a、array、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]
-
Pythonでのマージソートについて説明する
マージソートはソート手法です。これは、時間計算量が( n logn )の効率的な並べ替えアルゴリズムです。 )ここで、nはソートされる配列の長さです。 マージソートは、DivideandConquersパラダイムに従うアルゴリズムです。配列を2つの等しい半分に連続的に分割します。その後、それぞれが1つの要素を持つリストの並べ替えを開始し、並べ替えられたリストを継続的にマージして、完全な並べ替えリストを形成します。 したがって、ソートされた配列を取得します。 例 紫色のボックスと黒い矢印は、リストが2つに分割されていることを示しています。 緑色のボックスと赤い矢印は、並べ替え
-
マージソート用のPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、マージソートの概念を使用して配列をソートする必要があります ここでは、最大の要素を最後に配置します。これは、配列がソートされるまで繰り返されます。 次に、以下の実装のソリューションを見てみましょう- 例 #merge function def merge(arr, l, m, r): n1 = m - l + 1 n2 = r- m # create arrays L = [0]