////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2004/02/23(Mon) No.245
    配信数： 2390 ( Mag2 + Pubzine )
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００４年２月２３日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはー１話追加
　三人合体ホットハーブに７の１２「ここにも」を追加。第７章最終回！
[ 三人合体ホットハーブ ]
http://www.kab-studio.biz/Comic/HotHerb/index.html


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.biz/nikki2/index.html

2004/02/15 (Sun)
　プリキュアがなんかいまいち……。昨日の夜中にほとはー描いて、あとは 
Fate 。ネタバレ感想は日記にて。

2004/02/16 (Mon)
　CLANNAD 発売日決定〜。タイトスケジュール。へとへと。システムを継な
ぐ部分が大事。 Fate 感想。

2004/02/17 (Tue)
　１０時から１１時までおしごと。テンパってる。オーバーフロー気味。毎
日１１時半はきつい……。

2004/02/18 (Wed)
　バグが５つも。でも１０時半上がり。今日はガンスリ最終回。風邪？　そ
して整体と鍼とマッサージ。

2004/02/19 (Thu)
　全体的な改修を。ちょっとまずった……。趣味的なモデルが通る。風邪か
花粉症か。心揺さぶられる……。

2004/02/20 (Fri)
　花粉症気味。いつも通りのおしごと。デカレンジャーがかなりちぐはぐ気
味。そして隠語ができちゃう世界。

2004/02/21 (Sat)
　午前中は洗濯。午後はおしごと。結局１０時まで。 JUnit 様々。プラネ
テスの展開は勇気いると思う。明日の予定。来週はほとはーのできるまで。
絵とテキストじゃ全然違うのです。忙しくなるんで……。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第九章　四人　−２２−

　男が音もなく近づき手刀で薙ぐ。
　雅樹の左腕が飛んでいく。
「！！」
　息を飲む赤葉。
　残った右手が男の肩を掴む。
『蒼炎』
「な……！？」
　手から昇る蒼い炎が、男の皮膚を浸食する。甲高い音を立ててひびが入
り、裂け、砕ける。
「ガッ！！」
　無理矢理振り解き、距離を取る。左腕が肩口から折れ、泉に沈む。
「くそっ……でもまだ五分と五分……！？」
　雅樹の左腕が、目に見えて再生する。
「さ……させるか！」
　足を高く上げ踏み抜く。床がささくれ立ち疾る。
『白炎……』
　雅樹を白い炎が包み、一瞬で天井近くまで持ち上げる。
「な」
『橙炎』
　瞬時に数十の炎が雅樹の周りに現れ、飛ぶ。
「きゃっ！」
「ぐわぁ！！」
　伏せる赤葉、直撃する男。
「や、やめて……」
　止むことのない炎。
「！！」
　赤葉は咄嗟に入り口へと飛ぶ。炎は元いたところへと直撃し、床は砕け
た。
「……」
　震えが、止まらなかった。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『うわぁ、なんかホントに始めるんだね』
「まぁたった７回だから」
『でも１ヶ月以上ほとはー休むことになるんでしょ？』
「ほとはーのファンなら楽しんでもらえると思うけど」
『そうかなー』
http://www.kab-studio.biz/index.html
_______________________________________________________________[KCM]

////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 13.09
ソートの中身のバリエーション

「というわけで前回の続き」
『こんな関数だったよね』

void DoBubbleSort( int *p_piAry, int p_iSize )
{
    // 「入れ替え先」のループです。
    for( int iOut = 0; iOut < p_iSize - 1; iOut++ )
    {
        // 最後から先頭方向へのループです。
        // ただし「入れ替え先」までです。
        for( int iIn = p_iSize - 1; iOut < iIn; iIn-- )
        {
            if( p_piAry[iIn - 1] > p_piAry[iIn] )
            {
                // 前の方が大きいので入れ替えます。
                int iTemp = p_piAry[iIn];
                p_piAry[iIn] = p_piAry[iIn - 1];
                p_piAry[iIn - 1] = iTemp;
            }
        }
    }
}

「使用例はこう」

void Use_DoBubbleSort()
{
    int iAry[5];
    iAry[0] = 4;
    iAry[1] = 9;
    iAry[2] = 3;
    iAry[3] = 5;
    iAry[4] = 8;

    // ソートします。
    DoBubbleSort( iAry, 5 );

    for( int iF1 = 0; iF1 < 5; ++iF1 )
    {
        TRACE( "%d ", iAry[iF1] );
    }
    TRACE( "\n" );
    // 3 4 5 8 9 
}

『おー、ソートできてる』
「基本的には前回説明したとおり。

    for( int iOut = 0; iOut < p_iSize - 1; iOut++ )

「が入れ替え先のループ」

        for( int iIn = p_iSize - 1; iOut < iIn; iIn-- )

「が各周のループ」

            if( p_piAry[iIn - 1] > p_piAry[iIn] )

「が比較部分」

                int iTemp = p_piAry[iIn];
                p_piAry[iIn] = p_piAry[iIn - 1];
                p_piAry[iIn - 1] = iTemp;

「が入れ替え部分」
『入れ替えるとこは前回省略したとこだね。でもフツー』
「だから省略したんだし……さて。ここで、バリエーションについて見てみ
ます」
『バリエーションって、いろんなソートってやつ？』
「そうじゃなくて、バブルソートはバブルソートなんだけど、それ以外の部
分を変えてみよう、っていう話」
『あー』
「変えられるのは、次の３点」

・配列かそれ以外か。
・各要素の型。
・比較方法。

『あれ？　どっかで見たよおな……』
「 Version 13.06 ( No.242 ) で教えたでしょ」
『あー、そういえば』
「そのときの」

・ソートの早さ。
・安定かどうか。

「はソートアルゴリズムの性質だから変えられないんです」
『だから他の３つを変えるわけね』
「そういうこと。ちなみに、アルゴリズムの性質を決めるのは」

    for( int iOut = 0; iOut < p_iSize - 1; iOut++ )

「と」

        for( int iIn = p_iSize - 1; iOut < iIn; iIn-- )

「の部分。だから、ここは変えちゃダメだから」
『ってことは他のところを変えるわけね』
「そういうこと。まず、一番変えやすい〈比較方法〉について。比較方法を
変える時には」

            if( p_piAry[iIn - 1] > p_piAry[iIn] )

「を変えればいいから」
『 > を < にすると降順になって、 > を >= にすると安定ソートじゃなく
なるんだよね』
「そう。ただ、今火美ちゃんが言ったように、 > を >= にするとアルゴリ
ズムの性質も変わるから、そう考えるとこうした方がいいかも」

// p_iL > p_iR なら true を、
// それ以外は false を返すようにしてください。
bool CompareTo( int p_iL, int p_iR )
{
    if( p_iL > p_iR )
    {
        return true;
    }

    return false;
}

void DoBubbleSortUseComapre( int *p_piAry, int p_iSize )
{
    // 「入れ替え先」のループです。
    for( int iOut = 0; iOut < p_iSize - 1; iOut++ )
    {
        // 最後から先頭方向へのループです。
        // ただし「入れ替え先」までです。
        for( int iIn = p_iSize - 1; iOut < iIn; iIn-- )
        {
            if( CompareTo( p_piAry[iIn - 1], p_piAry[iIn] )
                == true )
            {
                // 前の方が大きいので入れ替えます。
                int iTemp = p_piAry[iIn];
                p_piAry[iIn] = p_piAry[iIn - 1];
                p_piAry[iIn - 1] = iTemp;
            }
        }
    }
}

『比較部分を CompareTo() って関数に置き換えたんだね』
「そして、 CompareTo() のコメントでコントラクトします」
『 > の時だけ true ってするわけね。そうすれば == の時は false のはず
だから、常に安定ソートになるわけね』
「そういうこと。他にも、こういうふうに比較部分を関数にすると、次のよ
うなメリットがあります」

・比較方法を簡単に変えられる。
・比較関数を付け替えられる。

「まず〈比較方法を簡単に変えられる〉について。今回は単なるソートだけ
ど、構造体やクラスをソートする時には」
『どの変数をソート対象にするか、とか違うんだもんね。そういうのも関数
に入れておけば簡単に修正できるものね』
「そういうこと。ループ部分から分けられてるから他の部分に影響が出ない
しね。実は、比較方法ってかなりややこしいこと多いから」
『え？　なんか簡単そうだけど』
「渡された変数によって比較する変数を変えたり、計算をしてから比較した
り」
『計算してから……』
「この〈計算〉とかが絡んでくるとかなりややこしくなってくるから、そう
いうことも考えて別関数にするといいかな」
『はーい』
「もうひとつ、〈比較関数を付け替えられる〉は、今は関数を修正する例を
上げたけど」
『それぞれ別に関数を作る？』
「っていう方法もあるから。そうすれば、プログラム的に、呼ぶ関数を変え
るだけで」
『比較方法を変えられる！』
「それに、実行時に呼ぶ関数を変えることもできるから。ソート関数に引数
を追加して、その引数をフラグにしてソート方法を変えるとか」
『そか、比較方法しか違わないんだったら別々の関数作らなくていいんだ
ね』
「そういうこと。それに、 Version 13.01 ( No.237 ) の関数ポインタを使
う方法だってできるから」
『あれって危険なんでしょ？』
「うん、だから強く勧めはしないけど、そういう方法もあるってことで。使
い方そのものはあとで説明するから」
『そなの？』
「ランタイムでソートをする qsort() っていう関数があって、その使い方
を説明するときにね。さて、バリエーションに関しては」

・配列かそれ以外か。
・各要素の型。

「が残っているので次回へ続く！」
『え”』

/*
    Preview Next Story!
*/
『結構ボリュームあるんだね』
「今回は欲張ってるからね」
『欲張ってる？』
「たぶん他のアルゴリズムの解説より詳しいと思うよ」
『というわけで次回』
＜ Version 13.10 文字列のソート ＞
「につづく！」
『ってゆーか、それやるからいつまでたっても終わらないんじゃない？』
「う”」


////////////////////////////////////////////////////////////////////
/*                ２００４年３月１日（月）の更新                  */
http://www.kab-studio.biz/index.html

・「ほとはーのできるまで」スタート！
　三人合体ホットハーブみたいな４コマを描きたいと思っているあなたに贈
る短期集中突発企画！　ほとはー完成までの工程をすべてお見せします！


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

