teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/02/11 12:34

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -10,4 +10,32 @@
10
10
  3. numberは何に使うのでしょうか? ソート結果をnumberに入れる?
11
11
 
12
12
  とりあえず2でnumberを使わないなら、sort_codeの値でswitch分岐し、それぞれの中で指定キーで大小判定を行い交換するかどうかのフラグを立てます。switch終了時、そのフラグが立っていたら、その2つを交換で良い筈です。
13
- 外れているようでしたら、補足情報をお願いします。
13
+ 外れているようでしたら、補足情報をお願いします。
14
+
15
+ ---
16
+ 【追記】
17
+ 総当りのソートですね。
18
+ 単純にiを0からn-1未満、jをi+1からn未満で回してData[i]、Data[j]を比較し、data[i]のageの方が大きかったら、Data[i]とData[j]を交換すればOKです。
19
+
20
+ ```C++
21
+ for (int i=0; i < head_count-1; ++i)
22
+ {
23
+ for (int j=i+1; j < head_count; ++j)
24
+ {
25
+ if (Data[i].getAge() > Data[j].getAge())
26
+ {
27
+ Human temp=Data[i];
28
+ Data[i]=Data[j];
29
+ Data[j]=temp;
30
+ }
31
+ }
32
+ }
33
+ ```
34
+
35
+ Humanのインスタンス自体をソートするのは非効率ですが、まずは簡単確実な方法で実装を進めた方がよいと思います。(上記コードもデバッグまではしていません。バグがあったらデバッグはお願いします。)
36
+
37
+ その後、効率を上げる場合は最初にnumber[i]=i;としておき、Data[number[i]]でData配列をアクセスし、Data[i]とData[j]を交換する代わりに、number[i]とnumber[j]を交換することで代用することも考えられます。
38
+
39
+ それとKSwordOfHasteさんが指摘されている点も反映しておくことをお勧めします。
40
+ `new 型[]`した時は、`delete[]`です。セットで使いましょう。
41
+