Scratch マージソート課題3

Scratch マまーージじソそーートと課か題だい3

課か題だい内ない容よう

スすペぺーースすキきーーでリりスすトとをマまーージじソそーートとを用もちいて昇しょう順じゅんに並ならび替かえ

解かい答とう

解かい答とうを表ひょう示じする

背はい景けい

変へん更こう①変へん更こう②
定義 変数初期化

↓↓↓↓↓

定義 変数初期化
[状態 v]を[未整列]にする
[前半 v]のすべてを削除する
[後半 v]のすべてを削除する
定義 マージソート(上)(下)

↓↓↓↓↓

定義 マージソート(上)(下)
もし<(上)<(下)>なら
マージソート(上)((((上)+(下))/(2))の[切り下げ v]::operators)
マージソート(((((上)+(下))/(2))の[切り下げ v]::operators)+(1))(下)
[前半 v]のすべてを削除する
[後半 v]のすべてを削除する
[中央 v]を((((上)+(下))/(2))の[切り下げ v]::operators)にする
[前半 v]を(((中央)-(上))+(1))にする
[後半 v]を((下)-(中央))にする
[選択場所 v]を(上)にする
(前半::variables)回繰り返す
[選択値 v]を([リスト v]の(選択場所)番目)にする
(選択値)を[前半 v]に追加する
[選択場所 v]を(1)ずつ変える
end
(後半::variables)回繰り返す
[選択値 v]を([リスト v]の(選択場所)番目)にする
(選択値)を[後半 v]に追加する
[選択場所 v]を(1)ずつ変える
end
[選択場所 v]を(上)にする
[前半選択場所 v]を(1)にする
[後半選択場所 v]を(1)にする
<<([前半 v]の長さ::list)<(前半選択場所)>または<([後半 v]の長さ::list)<(後半選択場所)>>まで繰り返す
[前半選択場所 v]を([リスト v]の(前半選択場所)番目)にする
[後半選択場所 v]を([リスト v]の(後半選択場所)番目)にする
もし<(前半選択値)<(後半選択値)>なら
[リスト v]の(選択場所)番目を(前半選択値)で置き換える
[選択場所 v]を(1)ずつ変える
[前半選択場所 v]を(1)ずつ変える
でなければ
[リスト v]の(選択場所)番目を(後半選択値)で置き換える
[選択場所 v]を(1)ずつ変える
[後半選択場所 v]を(1)ずつ変える
end
end
<([前半 v]の長さ::list)<(前半選択場所)>まで繰り返す
[前半選択値 v]を([前半 v]の(前半選択場所)番目)にする
[リスト v]の(選択場所)番目を(前半選択値)で置き換える
[選択場所 v]を(1)ずつ変える
[前半選択場所 v]を(1)ずつ変える
end
<([後半 v]の長さ::list)<(後半選択場所)>まで繰り返す
[後半選択値 v]を([前半 v]の(後半選択場所)番目)にする
[リスト v]の(選択場所)番目を(後半選択値)で置き換える
[選択場所 v]を(1)ずつ変える
[後半選択場所 v]を(1)ずつ変える
end
end

解かい説せつ

解かい説せつを表ひょう示じする

背はい景けい

変へん更こう①変へん更こう②
定義 変数初期化

定てい義ぎ「変へん数すう初しょ期き化か」が呼よび出だされたとき、スすクくリりプぷトとを開かい始しする

[状態 v]を[未整列]にする
[前半 v]のすべてを削除する
[後半 v]のすべてを削除する

変へん数すうの初しょ期き設せっ定てい

定義 マージソート(上)(下)

定てい義ぎ「マまーージじソそーートと」が呼よび出だされたとき、スすクくリりプぷトとを開かい始しする

もし<(上::custom)<(下::custom)>なら
end

ソそーートと範はん囲いが0になるまで繰くり返かえす

マージソート(上)((((上)+(下))/(2))の[切り下げ v]::operators)::custom
マージソート(((((上)+(下))/(2))の[切り下げ v]::operators)+(1))(下)::custom

半はん分ぶんずつ分わけてをさらにマまーージじソそーートとする。

[前半 v]のすべてを削除する
[後半 v]のすべてを削除する
[中央 v]を((((上)+(下))/(2))の[切り下げ v]::operators)にする

リりスすトと「前ぜん半はん」と「後こう半はん」をリりセせッっトとして、範はん囲いの中ちゅう央おうの場ば所しょを変へん数すう「中ちゅう央おう場ば所しょ」に格かく納のうする

[前半 v]を(((中央)-(上))+(1))にする
[後半 v]を((下)-(中央))にする
[選択場所 v]を(上)にする
(前半::variables)回繰り返す
[選択値 v]を([リスト v]の(選択場所)番目)にする
(選択値)を[前半 v]に追加する
[選択場所 v]を(1)ずつ変える
end
(後半::variables)回繰り返す
[選択値 v]を([リスト v]の(選択場所)番目)にする
(選択値)を[後半 v]に追加する
[選択場所 v]を(1)ずつ変える
end

前ぜん半はん部ぶ分ぶんと後こう半はん部ぶ分ぶんを、リりスすトと「前ぜん半はん」と「後こう半はん」に分わける

[選択場所 v]を(上)にする
[前半選択場所 v]を(1)にする
[後半選択場所 v]を(1)にする
<<([前半 v]の長さ::list)<(前半選択場所)>または<([後半 v]の長さ::list)<(後半選択場所)>>まで繰り返す
[前半選択場所 v]を([リスト v]の(前半選択場所)番目)にする
[後半選択場所 v]を([リスト v]の(後半選択場所)番目)にする
もし<(前半選択値)<(後半選択値)>なら
[リスト v]の(選択場所)番目を(前半選択値)で置き換える
[選択場所 v]を(1)ずつ変える
[前半選択場所 v]を(1)ずつ変える
でなければ
[リスト v]の(選択場所)番目を(後半選択値)で置き換える
[選択場所 v]を(1)ずつ変える
[後半選択場所 v]を(1)ずつ変える
end
end
<([前半 v]の長さ::list)<(前半選択場所)>まで繰り返す
[前半選択値 v]を([前半 v]の(前半選択場所)番目)にする
[リスト v]の(選択場所)番目を(前半選択値)で置き換える
[選択場所 v]を(1)ずつ変える
[前半選択場所 v]を(1)ずつ変える
end
<([後半 v]の長さ::list)<(後半選択場所)>まで繰り返す
[後半選択値 v]を([前半 v]の(後半選択場所)番目)にする
[リスト v]の(選択場所)番目を(後半選択値)で置き換える
[選択場所 v]を(1)ずつ変える
[後半選択場所 v]を(1)ずつ変える
end

リりスすトと「前ぜん半はん」と「後こう半はん」を比くらべて順じゅんに上うわ書がきする。

サさンんプぷルる

sb3ダだウうンんロろーードど