Scratch シェルソート課題3
課題内容
スペースキーでリストをシェルソートを用いて昇順に並び替え
解答
解答を表示する
背景
変更①変更②
定義 変数初期化
↓↓↓↓↓
定義 変数初期化 [状態 v]を[未整列]にする [間隔 v]を((([リスト v]の長さ::list)/(2))の[切り下げ v]::operators)にする [挿入元値 v]を(0)にする [選択値 v]を(0)にする
定義 シェルソート
↓↓↓↓↓
定義 シェルソート <(間隔)=(0)>まで繰り返す [挿入元場所 v]を((間隔)+(1))にする (([リスト v]の長さ::list)-(間隔))回繰り返す [挿入元値 v]を([リスト v]の(挿入元場所)番目)にする [選択場所 v]を((挿入元場所)-(間隔))にする [選択値 v]を([リスト v]の(選択場所)番目)にする <<(選択場所)<(1)>または<(選択値)<(挿入元値)>>まで繰り返す [リスト v]の((選択場所)+(間隔))番目を(選択値)で置き換える [選択場所 v]を((選択場所)-(間隔))ずつ変える [選択値 v]を([リスト v]の(選択場所)番目)にする end [リスト v]の((選択場所)+(間隔))番目を(挿入元値)で置き換える [挿入元場所 v]を(1)ずつ変える end [間隔 v]を(((間隔)/(2))の[切り下げ v]::operators)にする end
解説
解説を表示する
背景
変更①変更②
定義 変数初期化
定義「変数初期化」が呼び出されたとき、スクリプトを開始する
[状態 v]を[未整列]にする [間隔 v]を((([リスト v]の長さ::list)/(2))の[切り下げ v]::operators)にする [挿入元値 v]を(0)にする [選択値 v]を(0)にする
変数の初期設定
定義 シェルソート
定義「シェルソート」が呼び出されたとき、スクリプトを開始する
<(間隔)=(0)>まで繰り返す end
間隔が0になるまで繰り返す
[挿入元場所 v]を((間隔)+(1))にする
移動元のリストの場所を変数「挿入元場所」を格納する
(([リスト v]の長さ::list)-(間隔))回繰り返す end
リストの最後まで繰り返す
[挿入元値 v]を([リスト v]の(挿入元場所)番目)にする [選択場所 v]を((挿入元場所)-(間隔))にする [選択値 v]を([リスト v]の(選択場所)番目)にする
変数「挿入元場所」の1つ手前の場所と値を変数「選択場所」・「選択値」に格納する
<<(選択場所)<(1)>または<(選択値)<(挿入元値)>>まで繰り返す [リスト v]の((選択場所)+(間隔))番目を(選択値)で置き換える [選択場所 v]を((選択場所)-(間隔))ずつ変える [選択値 v]を([リスト v]の(選択場所)番目)にする end
変数「選択値」が変数「挿入元値」より大きくなるまで上書きして繰り返す
[リスト v]の((選択場所)+(間隔))番目を(挿入元値)で置き換える
変数「挿入元値」を変数「選択値」が変数「挿入元値」より大きくなる手前に格納する
[挿入元場所 v]を(1)ずつ変える
変数「挿入元場所」を次の位置にする
[間隔 v]を(((間隔)/(2))の[切り下げ v]::operators)にする
変数「間隔」を次の間隔にする