- ベストアンサー
ソートプログラムについて
ソートプログラムとして以下のように作成しました。 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 というようにしたいのですが、プログラムをどのように 書いていけば良いのかわかりません。 例のような出力にするにはどのようにすればいいのでしょうか 教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>回答いただいた以外で方法があるなら教えていただきたいのですが。 そこをご自身で考えるのが「楽しみ」なのですが、・・・。 その楽しみを年寄りがいただいて、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] ); } } 注:タブの代わりに全角空白を用いています。
その他の回答 (4)
JavaScript の回答ですが、実は、プログラミング言語C2の例題の回答そのものですよ。 3項演算子について調べられたら宜しいかと思います。
お礼
ありがとうございます。 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++); という書き方が許されるかです。 許されるような許されないような???
補足
ここまで書いていただいて申し訳ないのですが、 C言語ではどのように書くのでしょうか? 回答いただいた以外で方法があるなら教えていただきたいのですが。
- asuncion
- ベストアンサー率33% (2127/6289)
> >添え字(SORT[%d])用の変数を用意したほうが良いでしょう > なぜ用意するのでしょうか? for文によるループを制御するための変数iは0~9を 順にたどっていきますが、順位の値はiと必ずしも 等しくならないためです。
お礼
表示の出力時になぜ別の変数を用いたのか確認できました。 ありがとうございます。
- redfox63
- ベストアンサー率71% (1325/1856)
変更する部分は分かるのでしょうか? 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から始まります
お礼
変更部分をアドバイスをいただきながら、完成できました。 ありがとうございます。
補足
ありがとうございます。 for (i = 0; i < 10; i++) { //この部分にカウントアップするかしないかの 条件を付ければよいのでしょうか?// printf("SORT[%d] = %d\n",i,ten[i]); } >添え字(SORT[%d])用の変数を用意したほうが良いでしょう なぜ用意するのでしょうか?
お礼
参考にさせていただき、無事に出力表示できました。