• ベストアンサー

ソートプログラムについて

ソートプログラムとして以下のように作成しました。 int main( ) { int i, j, temp; int ten[10] = { 98,34,67,89,99,23,54,21,10,65 }; for (i=0; i< 9; i++) { for(j=i+1; j<10; j++) { if (ten[i] < ten[j]) { temp = ten[i]; ten[i] = ten[j]; ten[j] = temp; } } } for (i = 0; i < 10; i++) { printf("SORT[%d] = %d\n",i,ten[i]); } } このプログラムを昇順で同じ数字が入力された場合、出力表示として 例: SORT[1]=99 SORT[2]=98 SORT[2]=98 SORT[3]=89 SORT[4]=70 というようにしたいのですが、プログラムをどのように 書いていけば良いのかわかりません。 例のような出力にするにはどのようにすればいいのでしょうか 教えて下さい。

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

  • ベストアンサー
noname#48699
noname#48699
回答No.4

>回答いただいた以外で方法があるなら教えていただきたいのですが。 そこをご自身で考えるのが「楽しみ」なのですが、・・・。 その楽しみを年寄りがいただいて、2種類の表現方法を作ってみました。 (1)ゴルフ大会などの順位表現 SORT[1]=99 SORT[2]=98 SORT[2]=98 (2)ご要望 SORT[4]=89  ←[3] SORT[5]=70  ←[4] '//' を付け替えて実行してみて下さい。 iRank = 1; for( i = 0; i < 10; i++ ){  if( i ){ //  if( ten[i-1] != ten[i] ) iRank = i + 1; // (1)    if( ten[i-1] != ten[i] ) iRank++;  // (2)ご要望  }  printf( "SORT[%2d] = %d\n", iRank, ten[i] ); } } 注:タブの代わりに全角空白を用いています。

gogo340
質問者

お礼

参考にさせていただき、無事に出力表示できました。

その他の回答 (4)

noname#140971
noname#140971
回答No.5

JavaScript の回答ですが、実は、プログラミング言語C2の例題の回答そのものですよ。 3項演算子について調べられたら宜しいかと思います。

gogo340
質問者

お礼

ありがとうございます。 3項演算子について調べてみました、自分の思うような 出力ができました。

noname#140971
noname#140971
回答No.3

1=98 1=98 2=89 3=67 4=54 5=34 6=23 7=21 8=10 このような結果を得たいとのこと。 例えば、JavaScript では次のように書きます。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <title>ソート</title> <meta http-equiv="Content-script-Type" content="type"> <script type="text/javascript"> function bsort(v) {   var i, j;   for (i=0;i<8;i++) {      for (j=i+1; j<9; j++) {        if (v[i] < v[j]) {          swap(v, i, j);        }      }    } } function swap (v, i, j) {   var temp;   temp = v[i];   v[i] = v[j];   v[j] = temp; } </script> <body> <script> <!--   var v = new Array("98","34","67","89","98","23","54","21","10","65");   var i;   var k;   bsort(v);   k=0;   for (i = 0; i < 9; i++) {     (i>0 && (v[i] == v[i-1]) ? 0: k++);     document.write(k, "=");     document.write(v[i], "<br/>");    } //--> </script> </body> </html> 問題は、C言語で  (i>0 && (v[i] == v[i-1]) ? 0: k++);  という書き方が許されるかです。 許されるような許されないような???

gogo340
質問者

補足

ここまで書いていただいて申し訳ないのですが、 C言語ではどのように書くのでしょうか? 回答いただいた以外で方法があるなら教えていただきたいのですが。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

> >添え字(SORT[%d])用の変数を用意したほうが良いでしょう > なぜ用意するのでしょうか? for文によるループを制御するための変数iは0~9を 順にたどっていきますが、順位の値はiと必ずしも 等しくならないためです。

gogo340
質問者

お礼

表示の出力時になぜ別の変数を用いたのか確認できました。 ありがとうございます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

変更する部分は分かるのでしょうか? for (i = 0; i < 10; i++) {   printf("SORT[%d] = %d\n",i,ten[i]); } の部分を変更するのですが ・・・ どのような場合に 現在のiの部分を変えれば良いのか考えましょう まず i=0 の場合は無条件で1になる i>0の場合1つ前の配列tenの要素と見比べて同じならカウントアップしない 違うならカウントアップする ここまで説明すれば出来るでしょう 添え字(SORT[%d])用の変数を用意したほうが良いでしょう ちなみご質問のコードでは 表示の[]内は0から始まります

gogo340
質問者

お礼

変更部分をアドバイスをいただきながら、完成できました。 ありがとうございます。

gogo340
質問者

補足

ありがとうございます。 for (i = 0; i < 10; i++) { //この部分にカウントアップするかしないかの 条件を付ければよいのでしょうか?//   printf("SORT[%d] = %d\n",i,ten[i]); } >添え字(SORT[%d])用の変数を用意したほうが良いでしょう なぜ用意するのでしょうか?

関連するQ&A

専門家に質問してみよう