無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

C#を咥えてアルゴリズムをつつく1−基本選択ソート(再帰関数バージョン)。自身に問いかける。

この記事は「個別のアルゴリズムをつつく0−基本選択ソート。主は此処になおれ!」との連動企画ピヨ。詳しい説明はそちらを見てね。 そして、ボクの実装例を見る前に自分で実装を試みよう。
前回 は正攻法でいったから今度は再帰関数で行こう。再帰関数も面白いピヨ♪


using System;

class Program
{
    static void Main( string[ ] args ) {
        int[ ] values = new int[ ] { 0, 3, 5, 6, 2, 8, 7, 9, 1, 4 };
        Console.WriteLine( "整列前のデータ " );
        for ( int i = 0; i < values.Length; i++ )
            Console.Write( values[ i ] + "\t" );
        Console.Write( "\n" );

        Console.WriteLine( "整列後のデータ" );
        SortMan.SelectionSort( ref values, 0 );
        for ( int i = 0; i < values.Length; i++ )
            Console.Write( values[ i ] + "\t" );
        Console.Write( "\n" );
        Console.Read( );
    }
}
class SortMan
{
    //要素を昇順へと再帰的に整列する(再帰バージョン)
    public static void SelectionSort( ref int[ ] values, int sortPoint ) {
        int min = sortPoint;
        for ( int index = sortPoint + 1; index < values.Length; index++ ) {
            if ( values[ min ] > values[ index ] ) min = index;
        }
        if ( min != sortPoint )
            Exchange( ref values, sortPoint, min );
        if ( sortPoint < values.Length - 1 ) 
            SelectionSort( ref values, ++sortPoint );
    }

    //要素を交換する
    private static void Exchange( 
        ref int[ ] values, int destination, int source ) 
    {
        int tmp = values[ destination ];
        values[ destination ] = values[ source ];
        values[ source ] = tmp;
    }
}


こっちも当然int型に固定されているからあまりいい実装とは言えないピヨ。だけどお遊びだから許してピヨ♪
ところで、みんなは前回と今回どっちが速いと思う?答えは・・・・・・・・・・・・・・・・・・
前回の方が速いんだ。ところが、最適化すると今回の方が速いピヨ!
その理由は後で解析するピヨ。お楽しみに♪
別窓 | C# | コメント:1 | トラックバック:0 | ∧top | under∨
<<中の人の徒然草65 | 無差別に技術をついばむ鳥 | Javaを咥えてアルゴリズムをつつく0−基本選択ソート(型固定バージョン)。椅子取りゲームみたい。>>

この記事のコメント

最適化ってテールリカージョンとか関係ありんす?

その昔末尾再帰ってなんぞや?
って思ったことがありやした。

たぶんネタばらしとはほど遠い回答だと思うので
大丈夫かな?
2008-08-16 Sat 08:40 | URL | ま #mQop/nM.[ 内容変更]
∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |