質問: 一つの配列を並び替えた時、もう一つの配列もそれに対応して並び変える方法はありませんか。 例えば、一週間の体重を記録するとします。 int day[7]={3,5,4,2,6,1,7}; int weight[7]={56,54,58,52,53,60,50}; dayは何日目かを表し、weight[i]がday[i]の体重を表しているとして、 dayを昇順に並べ替えた時、それに対応してweightも並べ替えたいです。 どうすればよいでしょうか。知恵を拝借したいです。 昇順の並べ替えはfor文を使っています。
回答: 先の方が解答されている内容どちらも正しいと思います。 ただ、一般的にはyubaさんの解答が保守性、拡張性、可読性といった点でベターだとはおもいます。 (そして、オブジェクト指向言語っぽい考え方も身につきます) 考え方としては、下記のような違いがあります。 **・日付の配列、体重の配列をそれぞれ用意し、日付の配列のソートに合わせて体重の配列をソートする。 ・1つのレコード(日付、体重)を配列に格納し、日付でソートする。** 後者であれば、レコードに身長や、脈拍なども追加したい。。。といったときに改修が簡単です。 ソートを意識しなくても、レコードに追加すれば、自動的にソートされるからです。 ``` struct record { int day; int weight; int height; int pulse; }; // 構造体の初期化は下記のようにできます。 struct record rec[5] = { { 3, 56, 170.2, 54.3 }. { 5, 54, 170.1, 52.8 }. { /* 略 */ }. { /* 略 */ }. { /* 略 */ } }; // 日付を取得するときは下記のようにします。 printf(“%d \n”, rec[0].day ); ```