[ 高橋のページ ] [ プログラミングおよび実習II2006 ]
テストの得点を表すデータがいくつか与えられたときに,
というプログラムを作りましよう.前回同様に,
こととします.
<ステップ0の途中> 0 1 2 3 4 5 6 7 8 9 [ 1] [ 2] [ 3] [ 4] [ 5] [ 8] [ 6] [ 7] [ 9] [ 10] o(^-^)o
このようなデータの場合,j = 6 のときに5番目と6番目が交換されて
<ステップ0終了時> 0 1 2 3 4 5 6 7 8 9 [ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 8] [ 7] [ 9] [ 10] ↑確
となった後は,第 i = 0 ステップの処理では一度も交換がおこりません.ということは,実は,この第0ステップ終了時点では,0番目が確定できるだけではなく,1番目から5番目までもソート済みとして確定できることになります.
したがって,次に第 i = 1 ステップに進むのではなく,i = 1から5までのステップを飛ばして,次はいきなり第 i = 6 ステップに進むことができます.
<ステップ6の途中> 0 1 2 3 4 5 6 7 8 9 [ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 8] [ 7] [ 9] [ 10] ↑確 ↑確 ↑確 ↑確 ↑確 ↑確 o(^-^)o
そして,第7ステップでは一度も交換がおこらないので,(改良第1弾によって)このステップを終了した時点で処理を終えられることになります.
以下のような方針で考えるとよい鴨
ひつこくおまけ
PrintDataBubble()をさらに改造するなら…
--- step 5 --- [ 1] [ 2] [ 3] [ 4] [ 5] [ 7] [ 6] [ 8] [ 9] [ 10] *** *** *** *** *** o(^-^)o --- step 5 --- [ 1] [ 2] [ 3] [ 4] [ 5] [ 7] [ 6] [ 8] [ 9] [ 10] *** *** *** *** *** o(>_<)o --- step 6 --- [ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 7] [ 8] [ 9] [ 10] *** *** *** *** *** *** o(^-^)o