- ベストアンサー
選択ソートについて
------------------------------------- #include<stdio.h> int main(void) { int min,s,t,i,j; int num[]={5,6,4,9,2}; for(i=0;i<4;i++){ min=num[i]; s=i; ////◎1 for(j=i+1;j<5;j++){ if(num[j]<min){ min=num[j]; s=j; } } t=num[i]; num[i]=num[s]; num[s]=t; } for(i=0;i<5;i++){ printf("%d ",num[i]); } putchar('\n'); return 0; } -------------------------------------- 以上のプログラムで◎1の記述が無くても正常にソートしてくれたので疑問に思いました。 「s=i;」が無い場合、最初のループのif文で、 if(num[j]<min){ min=num[j]; s=j; } 「6<5」を比べる時、条件に見合わないので、sに何も代入されず、 t=num[i]; num[i]=num[s]; num[s]=t; 以上の記述で、sが初期化されてないので、その時点のエラーが出ると思ったんですが、出ないで正常に動きました。 何故なのか教えてもらえると嬉しいです。
- みんなの回答 (5)
- 専門家の回答
お礼
ご回答ありがとうございます。 >「◎1の行が無い場合に、sに値が一度も代入されず、不定になる」の>は「元々、データがソート済みの時」だけです。 if文の条件が1度も適合しないという事で、上記の内容理解できました。ありがとうございます。