回答編集履歴

1

追記

2017/02/11 12:34

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -23,3 +23,61 @@
23
23
  とりあえず2でnumberを使わないなら、sort_codeの値でswitch分岐し、それぞれの中で指定キーで大小判定を行い交換するかどうかのフラグを立てます。switch終了時、そのフラグが立っていたら、その2つを交換で良い筈です。
24
24
 
25
25
  外れているようでしたら、補足情報をお願いします。
26
+
27
+
28
+
29
+ ---
30
+
31
+ 【追記】
32
+
33
+ 総当りのソートですね。
34
+
35
+ 単純にiを0からn-1未満、jをi+1からn未満で回してData[i]、Data[j]を比較し、data[i]のageの方が大きかったら、Data[i]とData[j]を交換すればOKです。
36
+
37
+
38
+
39
+ ```C++
40
+
41
+ for (int i=0; i < head_count-1; ++i)
42
+
43
+ {
44
+
45
+ for (int j=i+1; j < head_count; ++j)
46
+
47
+ {
48
+
49
+ if (Data[i].getAge() > Data[j].getAge())
50
+
51
+ {
52
+
53
+ Human temp=Data[i];
54
+
55
+ Data[i]=Data[j];
56
+
57
+ Data[j]=temp;
58
+
59
+ }
60
+
61
+ }
62
+
63
+ }
64
+
65
+ ```
66
+
67
+
68
+
69
+ Humanのインスタンス自体をソートするのは非効率ですが、まずは簡単確実な方法で実装を進めた方がよいと思います。(上記コードもデバッグまではしていません。バグがあったらデバッグはお願いします。)
70
+
71
+
72
+
73
+ その後、効率を上げる場合は最初にnumber[i]=i;としておき、Data[number[i]]でData配列をアクセスし、Data[i]とData[j]を交換する代わりに、number[i]とnumber[j]を交換することで代用することも考えられます。
74
+
75
+
76
+
77
+ それとKSwordOfHasteさんが指摘されている点も反映しておくことをお勧めします。
78
+
79
+ `new 型[]`した時は、`delete[]`です。セットで使いましょう。
80
+
81
+
82
+
83
+