この記事は「
個別のアルゴリズムをつつく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型に固定されているからあまりいい実装とは言えないピヨ。だけどお遊びだから許してピヨ♪
ところで、みんなは
前回と今回どっちが速いと思う?答えは・・・・・・・・・・・・・・・・・・
前回の方が速いんだ。ところが、最適化すると今回の方が速いピヨ!
その理由は後で解析するピヨ。お楽しみに♪