• ベストアンサー

ソートプログラム

前に質問したものです。慌てていたのですみません。 Cで書いた直接選択法です。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 void main( void ) { int min,s,t,i,j,k,a[N]; srand((unsigned int)time(NULL)); for(i=0;i<N;i++) a[i]=rand()%1000+1; for(j=0;j<i-1;j++){ min=a[j]; s=j; for(k=j+1;k<i;k++){ if(a[k]<min){ min=a[k]; s=k; } } t=a[j];a[j]=a[s];a[s]=t; for(s=0;s<i;s++) printf("%d,\t",a[s]); } } このプログラムを実行すると、1回ずつ入れ替えされたものが出力されます。 100回、200回、・・・と入れ替えを行った値を出力するには、どうすればよいでしょうか? ループを入れてみたりしてみましたが、、?? プログラムを再帰の方法をつかって書いたほうが、、、?? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

printf関数による印刷ループ(by:s)がjのループ中で毎回実行されてますね。 この印刷ループを100回に1回実行するようにif文を追加すればいいでしょう。 if文の内容は既にNo.1の方が回答されている通りです。

wangorou
質問者

お礼

ありがとうございました。

その他の回答 (1)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.1

変数 i が 0 から N-1 まで変化しますから、i を使って100の倍数回の時に真になる条件文を書き、中に表示ルーチンを書けばよいでしょう。 ちなみに i=0 の時が1回目ですから、100回目の時は i=99 です。 同様に200回目が i=199、300回目が i=299 となりますから、「i を100で割った余りが 99 なら」という条件文を書けばOKですね。

wangorou
質問者

お礼

ありがとうございました。

関連するQ&A