Scratch シェーカーソート課題3
課題内容
スペースキーでリストをシェーカーソートを用いて昇順に並び替え
解答
解答を表示する
背景
変更①変更②変更③
定義 変数初期化
↓↓↓↓↓
定義 変数初期化 [状態 v]を[未整列]にする [終端上 v]を(1)にする [終端下 v]を([リスト v]の長さ::list)にする [天秤左場所 v]を(0)にする [天秤右場所 v]を(0)にする
定義 シェーカーソート
↓↓↓↓↓
定義 シェーカーソート <(終端上)=(終端下)>まで繰り返す バブルソート(終端下)(-1)::custom [終端上 v]を(最終交換場所)にする バブルソート(終端上)(1)::custom [終端下 v]を(最終交換場所)にする end
定義 バブルソート(開始場所)(向き)
↓↓↓↓↓
定義 バブルソート(開始場所)(向き) [選択場所 v]を(開始場所)にする ((終端下)-(終端上))回繰り返す [天秤左場所 v]を((選択場所)+(向き))にする [天秤左値 v]を([リスト v]の(天秤左場所)番目)にする [天秤右場所 v]を(選択場所)にする [天秤右値 v]を([リスト v]の(天秤右場所)番目)にする もし<((天秤左値)*(向き))<((天秤右値)*(向き))>なら [リスト v]の(天秤左場所)番目を(天秤右値)で置き換える [リスト v]の(天秤右場所)番目を(天秤左値)で置き換える [最終交換場所 v]を(選択場所)にする end [選択場所 v]を(向き)ずつ変える end
解説
解説を表示する
背景
変更①変更②変更③
定義 変数初期化
定義「変数初期化」が呼び出されたとき、スクリプトを開始する
[状態 v]を[未整列]にする [終端上 v]を(1)にする [終端下 v]を([リスト v]の長さ::list)にする [天秤左場所 v]を(0)にする [天秤右場所 v]を(0)にする
変数の初期設定
定義 シェーカーソート
定義「シェーカーソート」が呼び出されたとき、スクリプトを開始する
<(終端上)=(終端下)>まで繰り返す end
終端上と終端下が同じになるまで繰り返す
バブルソート(終端下)(-1)::custom [終端上 v]を(最終交換場所)にする バブルソート(終端上)(1)::custom [終端下 v]を(最終交換場所)にする
向きを下→上・上から下でバブルソートする
定義 バブルソート(開始場所)(向き)
定義「バブルソート」が呼び出されたとき、スクリプトを開始する
[選択場所 v]を(開始場所::custom)にする
変数「選択場所」を格納する
((終端下)-(終端上))回繰り返す end
変数「選択場所」が変数「終端上」または変数「終端下」まで繰り返す
[天秤左場所 v]を((選択場所)-(向き::custom))にする [天秤左値 v]を([リスト v]の(天秤左場所)番目)にする [天秤右場所 v]を(選択場所)にする [天秤右値 v]を([リスト v]の(天秤右場所)番目)にする
天秤で計る場所と値を変数「天秤左場所」・「天秤左値」・「天秤右場所」・「天秤右値」に格納する
もし<((天秤左値)*(向き::custom))<((天秤右値)*(向き::custom))>なら [リスト v]の(天秤左場所)番目を(天秤右値)で置き換える [リスト v]の(天秤右場所)番目を(天秤左値)で置き換える [最終交換場所 v]を(選択場所)にする end
向きによってを条件を変え、リストの「天秤左場所」番目と「天秤右場所」番目の値を入れ替え、最終交換場所を格納する
[選択場所 v]を(向き::custom)ずつ変える
変数「選択場所」を次の位置にする