質問: head_count - 1; j > i; j--){ if (Data[j].getAge() < Data[j - 1].getAge()){ } } } delete Data; delete number; return 0; }
回答: こんにちは。 質問の意図が今ひとつ掴めません。 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です。 ``` 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[]`です。セットで使いましょう。