重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Cでアルゴリズムの勉強をしているものです。
以下のプログラムを実行して
9 8 7 6 5 4 3 2 1 10
入力すると
10 2 3 4 5 6 7 8 9 9
と帰ってきます。
習いたてでどこが悪いかわからないのでどなたか教えてください 汗。


////*直接選択法*////

#include <stdio.h>
#define MAXDATA 10
void selection(int a[],int n){

int i,j,t;

for(i=0 ; i < n ; i++){


for(j=i+1 ; j<n ; j++){
if(a[j] < a[i])
t = a[i];
a[i] = a[j];
a[j] = t;
}



}
}
int main(void)
{
int k,j,sort[MAXDATA];



for(k=0;k < MAXDATA;k++)
{printf("sort[%d]:",k); scanf("%d",&sort[k]);}

for(k=0;k < MAXDATA;k++)
printf("%3d",sort[k]);

puts("ソートしますか? Yes:1 No:0 ///");

scanf("%d",&j);

if(j==1){
selection(sort,MAXDATA);
for(k=0;k < MAXDATA;k++) printf("%3d",sort[k]);

}
putchar('\n');

return(0);
}

A 回答 (2件)

if文が成立したときの処理に{}を省略すると次の1文のみしか対象になりません。

つまり

if(a[j] < a[i])
  t = a[i];
a[i] = a[j];
a[j] = t;

と書くと、a[j] < a[i]が成立したとき、t = a[i];が実行され、a[i] = a[j];とa[j] = t;は常に実行されてしまいます。
そこで、
if(a[j] < a[i]){
  t = a[i];
a[i] = a[j];
a[j] = t;
}
と、{}を付けてください。ちなみに、メールなのでインデントが正しくなっていませんが、実際はインデントも正しく付けてください。
{}は1文しかないときに省略可能ですが、極力省略しないほうがいいです。省略できるものを全て省略すると、読みにくいプログラムになってしまいます。
例えば
  A+B*C

  A+(B*C)
と書いたほうが解りやすいと思います。
    • good
    • 0
この回答へのお礼

うわ見落としていました 汗。インデントも気を付けて、いいプログラムが
掛けるよう頑張ります。

お礼日時:2009/11/04 11:15

そもそもこのアルゴリズムは直接選択法ではありません。


バブル・ソートです。
    • good
    • 0
この回答へのお礼

そうなんですか!?まったく気づきませんでした。バブルソートのほうもチェックしておきます。

お礼日時:2009/11/04 11:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!