Scratch クイックソート課題3
課題内容
スペースキーでリストをクイックソートを用いて昇順に並び替え
解答
解答を表示する
背景
変更①変更②
定義 変数初期化
↓↓↓↓↓
定義 変数初期化 [状態 v]を[未整列]にする [前半 v]のすべてを削除する [後半 v]のすべてを削除する [ピポット v]のすべてを削除する
定義 クイックソート(上)(下)
↓↓↓↓↓
定義 クイックソート(上)(下) もし<(上)<(下)>なら [前半 v]のすべてを削除する [後半 v]のすべてを削除する [ピボット場所 v]を(上)にする [ピボット値 v]を([リスト v]の(ピボット場所)番目)にする [選択場所 v]を(上)にする (((下)-(上))+(1))回繰り返す [選択値 v]を([リスト v]の(選択場所)番目)にする もし<(選択値)<(ピボット値)>なら (選択値)を[前半 v]に追加する でなければ (選択値)を[後半 v]に追加する [選択場所 v]を(1)ずつ変える end end [選択場所 v]を(上)にする [前半選択場所 v]を(1)にする [後半選択場所 v]を(1)にする ([前半 v]の長さ::list)回繰り返す [前半選択値 v]を([前半 v]の(前半選択場所)番目)にする [リスト v]の(選択場所)番目を(前半選択値)で置き換える [選択場所 v]を(1)ずつ変える [前半選択場所 v]を(1)ずつ変える end (選択場所)を[ピボット v]に追加する ([後半 v]の長さ::list)回繰り返す [後半選択値 v]を([後半 v]の(後半選択場所)番目)にする [リスト v]の(選択場所)番目を(後半選択値)で置き換える [選択場所 v]を(1)ずつ変える [後半選択場所 v]を(1)ずつ変える end クイックソート(上)(([ピボット v]の([ピボット v]の長さ::list)番目)-(1)) クイックソート(([ピボット v]の([ピボット v]の長さ::list)番目)+(1))(下) [ピボット v]の([ピボット v]の長さ::list)番目を削除する end
解説
解説を表示する
背景
変更①変更②
定義 変数初期化
定義「変数初期化」が呼び出されたとき、スクリプトを開始する
[状態 v]を[未整列]にする [前半 v]のすべてを削除する [後半 v]のすべてを削除する [ピポット v]のすべてを削除する
変数の初期設定
定義 クイックソート(上)(下)
定義「クイックソート」が呼び出されたとき、スクリプトを開始する
もし<(上::custom)<(下::custom)>なら end
ソート範囲が0になるまで繰り返す
[前半 v]のすべてを削除する [後半 v]のすべてを削除する [ピボット場所 v]を(上)にする [ピボット値 v]を([リスト v]の(ピボット場所)番目)にする
リスト「前半」と「後半」をリセットして、範囲の最初の場所と値を変数「ピボット場所」・「ピボット値」に格納する
[選択場所 v]を(上)にする (((下)-(上))+(1))回繰り返す [選択値 v]を([リスト v]の(選択場所)番目)にする もし<(選択値)<(ピボット値)>なら (選択値)を[前半 v]に追加する でなければ (選択値)を[後半 v]に追加する [選択場所 v]を(1)ずつ変える end
変数「ピボット値」を基準に、リスト「前半」と「後半」に分ける
[選択場所 v]を(上)にする [前半選択場所 v]を(1)にする [後半選択場所 v]を(1)にする ([前半 v]の長さ::list)回繰り返す [前半選択値 v]を([前半 v]の(前半選択場所)番目)にする [リスト v]の(選択場所)番目を(前半選択値)で置き換える [選択場所 v]を(1)ずつ変える [前半選択場所 v]を(1)ずつ変える end (選択場所)を[ピボット v]に追加する ([後半 v]の長さ::list)回繰り返す [後半選択値 v]を([後半 v]の(後半選択場所)番目)にする [リスト v]の(選択場所)番目を(後半選択値)で置き換える [選択場所 v]を(1)ずつ変える [後半選択場所 v]を(1)ずつ変える end
リスト「前半」と「後半」を順に上書きする。
クイックソート(上)(([ピボット v]の([ピボット v]の長さ::list)番目)-(1))::custom クイックソート(([ピボット v]の([ピボット v]の長さ::list)番目)+(1))(下)::custom [ピボット v]の([ピボット v]の長さ::list)番目を削除する
前半部分と後半部分をさらにクイックソートする。