回答編集履歴

3

シフトアップ・ダウンのタイミングで数列を出力してなかった

2020/07/27 13:39

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -44,8 +44,6 @@
44
44
 
45
45
  heap.AddRange(new[] { 21, 99, 38, 8, 16 });
46
46
 
47
- Console.WriteLine(heap);
48
-
49
47
  }
50
48
 
51
49
  }
@@ -66,15 +64,21 @@
66
64
 
67
65
  num = num.Append(value).ToArray();
68
66
 
69
- var i = num.Length - 1;
67
+ var current = num.Length - 1;
70
68
 
69
+ var parent = current / 2;
70
+
71
- while (i > 0 && num[i / 2] > num[i])
71
+ while (current > 0 && num[parent] > num[current])
72
72
 
73
73
  {
74
74
 
75
- (num[i / 2], num[i]) = (num[i], num[i / 2]);
75
+ (num[parent], num[current]) = (num[current], num[parent]);
76
76
 
77
+ current = parent;
78
+
77
- i /= 2;
79
+ parent /= 2;
80
+
81
+ Console.WriteLine(this);
78
82
 
79
83
  }
80
84
 

2

追記

2020/07/27 13:39

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -11,3 +11,97 @@
11
11
 
12
12
 
13
13
  定義によっては可能、また他の要素を持たないとは書いていないため、誤った回答として撤回します。
14
+
15
+
16
+
17
+ ### 追記
18
+
19
+
20
+
21
+ ```C#
22
+
23
+ using System;
24
+
25
+ using System.Collections.Generic;
26
+
27
+ using System.Linq;
28
+
29
+
30
+
31
+ namespace ConsoleApp1
32
+
33
+ {
34
+
35
+ class Program
36
+
37
+ {
38
+
39
+ static void Main()
40
+
41
+ {
42
+
43
+ var heap = new Heap();
44
+
45
+ heap.AddRange(new[] { 21, 99, 38, 8, 16 });
46
+
47
+ Console.WriteLine(heap);
48
+
49
+ }
50
+
51
+ }
52
+
53
+
54
+
55
+ class Heap
56
+
57
+ {
58
+
59
+ private int[] num = new int[0];
60
+
61
+
62
+
63
+ public void Add(int value)
64
+
65
+ {
66
+
67
+ num = num.Append(value).ToArray();
68
+
69
+ var i = num.Length - 1;
70
+
71
+ while (i > 0 && num[i / 2] > num[i])
72
+
73
+ {
74
+
75
+ (num[i / 2], num[i]) = (num[i], num[i / 2]);
76
+
77
+ i /= 2;
78
+
79
+ }
80
+
81
+ }
82
+
83
+
84
+
85
+ public void AddRange(IEnumerable<int> values)
86
+
87
+ {
88
+
89
+ foreach (var i in values) Add(i);
90
+
91
+ }
92
+
93
+
94
+
95
+ public override string ToString()
96
+
97
+ {
98
+
99
+ return string.Join(",", num);
100
+
101
+ }
102
+
103
+ }
104
+
105
+ }
106
+
107
+ ```

1

追記

2020/07/27 12:51

投稿

Zuishin
Zuishin

スコア28660

test CHANGED
@@ -3,3 +3,11 @@
3
3
 
4
4
 
5
5
  不可能です。
6
+
7
+
8
+
9
+ ### 追記
10
+
11
+
12
+
13
+ 定義によっては可能、また他の要素を持たないとは書いていないため、誤った回答として撤回します。