バブルソートのアルゴリズムを参考にして自分なりに考えて作ったプログラムを書きました。
下記のプログラムは配列の中身を昇順としてソートさせようとしたプログラムです。
#include <stdio.h>
// データの要素数
#define ELEMENT 10
// 変数の中身を入れ換える関数
void Swap(int *x, int *y)
{
int z;
z = *x;
*x = *y;
*y = z ;
return ;
}
int main()
{
int i;
int data[ELEMENT] = { 5, 9, 1, 3, 2, 8, 6, 7, 4, 10 };
// ソート
for( i = 0; i < ELEMENT; i++ )
{
if( data[i] > data[i+1] )
{
Swap( &data[i], &data[i+1] );
// iを一つ前に戻す
if( i == 0 ) i = -1;
else i -= 2;
}
}
// 出力
for( i = 0; i < ELEMENT; i++ )
{
printf( "%d\n", data[i] );
}
return 0;
}
if( data > data[i+1] )
上記のif文のままだとdata[0]の数値がデタラメな数値になってしまい、実行時にエラーが発生してしまいます。
このif文の不等号を逆にすると降順として正しく動きます。
昇順としてソートさせようとした時、何故data[0]の値がデタラメな数値になってしまうのか教えてください。
申し訳ないですが返信は翌朝になりそうです。