回答編集履歴

1 追記

Chironian

Chironian score 20270

2017/02/11 21:33  投稿

こんにちは。
質問の意図が今ひとつ掴めません。
1. ソート方法自体が分からないのでしょうか?
この場合、ソート・アルゴリズムの学習も目的に入ってますか? 標準ライブラリを用いてソートしても問題ないですか?
2. ソート方法は分かるけど、キーを自由に指定する方法が分からないのでしょうか?
3. numberは何に使うのでしょうか? ソート結果をnumberに入れる?
とりあえず2でnumberを使わないなら、sort_codeの値でswitch分岐し、それぞれの中で指定キーで大小判定を行い交換するかどうかのフラグを立てます。switch終了時、そのフラグが立っていたら、その2つを交換で良い筈です。
外れているようでしたら、補足情報をお願いします。
外れているようでしたら、補足情報をお願いします。
---
【追記】
総当りのソートですね。
単純にiを0からn-1未満、jをi+1からn未満で回してData[i]、Data[j]を比較し、data[i]のageの方が大きかったら、Data[i]とData[j]を交換すればOKです。
```C++
for (int i=0; i < head_count-1; ++i)
{
   for (int j=i+1; j < head_count; ++j)
   {
       if (Data[i].getAge() > Data[j].getAge())
       {
           Human temp=Data[i];
           Data[i]=Data[j];
           Data[j]=temp;
       }
   }
}
```
Humanのインスタンス自体をソートするのは非効率ですが、まずは簡単確実な方法で実装を進めた方がよいと思います。(上記コードもデバッグまではしていません。バグがあったらデバッグはお願いします。)
その後、効率を上げる場合は最初にnumber[i]=i;としておき、Data[number[i]]でData配列をアクセスし、Data[i]とData[j]を交換する代わりに、number[i]とnumber[j]を交換することで代用することも考えられます。
それとKSwordOfHasteさんが指摘されている点も反映しておくことをお勧めします。
`new 型[]`した時は、`delete[]`です。セットで使いましょう。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る