★★ Java の宿題ここで答えます Part 68 ★★at TECH
★★ Java の宿題ここで答えます Part 68 ★★ - 暇つぶし2ch182:デフォルトの名無しさん
09/09/04 06:15:27
>>177
もう見てないかも知れんが。

3 5 4 1 9 8 7 2 15 を例にとると、
 ・データの範囲を0~19とする。
 ・データは3つまでしか読めない。
という仮定で、簡略化のため、テンポラリファイルにも3つの値しか書きこまないとする。
テンポラリファイルは7つできる。それぞれ0.dat~6.datとする。

最初に、3つ読み込む
 メモリには「3,4,5」がある。
 これを0.dat~6.datに振り分ける。
 この場合、1.datに3,4,5が書き込まれ、他のテンポラリファイルには何のデータもない。
次にもう3つ読む。
 メモリには「1,9,8」がある。
 これを振り分けると、1→0.dat、9→3.dat、8→2.datとなる。
最後に3つ読み振り分ける。7→2.dat、2→0.dat、15→5.datとなる。
この時点で振り分け終わり。各テンポラリファイルには、
 0.dat:「2」、1.dat:「3,4,5」、2.dat:「8,7」、3.dat:「9」、4.dat:「」、5.dat:「」、6.dat:「15」
というデータが入っている。

次に各テンポラリファイルごとに読み込みなおして、クイックソート→書き戻しを行う。
これでテンポラリファイルの内容は
 0.dat:「2」、1.dat:「3,4,5」、2.dat:「7,8」、3.dat:「9」、4.dat:「」、5.dat:「」、6.dat:「15」
となる。これを連結すれば
 「2,3,4,5,7,8,9,15」
となって全体のソートが完了する。

こんな感じ。



次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch