回答編集履歴
6
誤字修正
test
CHANGED
@@ -70,23 +70,13 @@
|
|
70
70
|
|
71
71
|
|
72
72
|
|
73
|
-
### 2.2. print 関数で出力
|
74
|
-
|
75
|
-
最後の結果だけでなく、途中結果についても `print(A)` で表示して、自分が意図していない動作を **しはじめた** 箇所を突き止めるといいかなと思います。出力結果だけでデバックは、結構辛いかなと感じます。とは言え、途中結果を出力してもわからないものは、わからないのですが笑
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
### 2.
|
73
|
+
### 2.2. reversed 関数
|
82
74
|
|
83
75
|
以下の2つは等価です。
|
84
76
|
|
85
77
|
```python
|
86
78
|
|
87
|
-
range(i - 1, -1, -1)
|
79
|
+
range(i - 1, -1, -1) == reversed(range(i))
|
88
|
-
|
89
|
-
reversed(range(i))
|
90
80
|
|
91
81
|
```
|
92
82
|
|
@@ -94,41 +84,41 @@
|
|
94
84
|
|
95
85
|
|
96
86
|
|
97
|
-
### 2.
|
87
|
+
### 2.3. 入れ替えの書き方
|
98
88
|
|
99
89
|
変数をいれかえるには
|
100
90
|
|
101
91
|
```python
|
102
92
|
|
103
|
-
|
93
|
+
# 挿入するために配列のtmpの1つ前から挿入した挿入したい
|
104
94
|
|
105
|
-
|
95
|
+
# exchangeindexの要素を1つずつ後ろに移動させる
|
106
96
|
|
107
|
-
|
97
|
+
for k in range(i+1, -1, -1):
|
108
98
|
|
109
|
-
|
99
|
+
A[k] = A[k-1]
|
110
100
|
|
111
|
-
|
101
|
+
A[j] = tmp
|
112
102
|
|
113
103
|
```
|
114
104
|
|
115
105
|
|
116
106
|
|
117
|
-
#### 2.
|
107
|
+
#### 2.3.1. 書き方 1
|
118
108
|
|
119
109
|
```python
|
120
110
|
|
121
|
-
|
111
|
+
A[i] = A[j]
|
122
112
|
|
123
|
-
|
113
|
+
A[j] = tmp
|
124
114
|
|
125
|
-
|
115
|
+
i = j
|
126
116
|
|
127
117
|
```
|
128
118
|
|
129
119
|
|
130
120
|
|
131
|
-
#### 2.
|
121
|
+
#### 2.3.2. 書き方 2
|
132
122
|
|
133
123
|
Python ではこのように書けます。
|
134
124
|
|
5
誤字修正
test
CHANGED
@@ -86,7 +86,7 @@
|
|
86
86
|
|
87
87
|
range(i - 1, -1, -1)
|
88
88
|
|
89
|
-
reversed(i)
|
89
|
+
reversed(range(i))
|
90
90
|
|
91
91
|
```
|
92
92
|
|
4
誤字修正
test
CHANGED
@@ -140,4 +140,4 @@
|
|
140
140
|
|
141
141
|
|
142
142
|
|
143
|
-
* [Python の
|
143
|
+
* [Python の代入の色々な書き方](https://python.ms/sub/misc/assignment/)
|
3
誤字修正
test
CHANGED
@@ -1,15 +1,3 @@
|
|
1
|
-
挿入ソート自体はもっと短く書けます。
|
2
|
-
|
3
|
-
* [Python の挿入ソート](https://python.ms/sub/algorithm/sort/insertion/)
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
1
|
## 1. 修正したコード
|
14
2
|
|
15
3
|
なるべく元のコードに沿う形で書き換えました。
|
@@ -72,7 +60,17 @@
|
|
72
60
|
|
73
61
|
## 2. 改善点
|
74
62
|
|
63
|
+
### 2.1. break 文
|
64
|
+
|
65
|
+
挿入ソートには break 文が必要です。break 文がないとバブルソートと、ある意味同じものになってしまいます。それについては以下で書きました。
|
66
|
+
|
67
|
+
* [Python の挿入ソート](https://python.ms/sub/algorithm/sort/insertion/)
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
75
|
-
### 2.
|
73
|
+
### 2.2. print 関数で出力
|
76
74
|
|
77
75
|
最後の結果だけでなく、途中結果についても `print(A)` で表示して、自分が意図していない動作を **しはじめた** 箇所を突き止めるといいかなと思います。出力結果だけでデバックは、結構辛いかなと感じます。とは言え、途中結果を出力してもわからないものは、わからないのですが笑
|
78
76
|
|
@@ -80,7 +78,7 @@
|
|
80
78
|
|
81
79
|
|
82
80
|
|
83
|
-
### 2.
|
81
|
+
### 2.3. reversed 関数
|
84
82
|
|
85
83
|
以下の2つは等価です。
|
86
84
|
|
@@ -96,7 +94,7 @@
|
|
96
94
|
|
97
95
|
|
98
96
|
|
99
|
-
### 2.
|
97
|
+
### 2.4. 入れ替えの書き方
|
100
98
|
|
101
99
|
変数をいれかえるには
|
102
100
|
|
@@ -116,7 +114,7 @@
|
|
116
114
|
|
117
115
|
|
118
116
|
|
119
|
-
#### 2.
|
117
|
+
#### 2.4.1. 書き方 1
|
120
118
|
|
121
119
|
```python
|
122
120
|
|
@@ -130,7 +128,7 @@
|
|
130
128
|
|
131
129
|
|
132
130
|
|
133
|
-
#### 2.
|
131
|
+
#### 2.4.2. 書き方 2
|
134
132
|
|
135
133
|
Python ではこのように書けます。
|
136
134
|
|
2
誤字修正
test
CHANGED
@@ -45,6 +45,10 @@
|
|
45
45
|
A[j] = tmp
|
46
46
|
|
47
47
|
i = j
|
48
|
+
|
49
|
+
else:
|
50
|
+
|
51
|
+
break # <- 挿入ソートにはこの break 文がないといけない。
|
48
52
|
|
49
53
|
|
50
54
|
|
1
誤字
test
CHANGED
@@ -1,69 +1,141 @@
|
|
1
|
-
|
1
|
+
挿入ソート自体はもっと短く書けます。
|
2
2
|
|
3
|
-
O(n^2) なのに for 文が 3 つも重なっているので、全面的に書き換えたものを提示します。
|
4
|
-
|
5
|
-
|
3
|
+
* [Python の挿入ソート](https://python.ms/sub/algorithm/sort/insertion/)
|
6
4
|
|
7
5
|
|
8
6
|
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
## 1. 修正したコード
|
14
|
+
|
15
|
+
なるべく元のコードに沿う形で書き換えました。
|
16
|
+
|
9
17
|
```python
|
10
18
|
|
11
|
-
|
19
|
+
# sort(A, i) 関数は無くしました。
|
12
20
|
|
13
|
-
n = len(lst)
|
14
21
|
|
15
|
-
for i in range(n):
|
16
22
|
|
17
|
-
|
23
|
+
def solution(A):
|
18
24
|
|
19
|
-
|
25
|
+
# for i in range(len(A)-1):
|
20
26
|
|
21
|
-
|
27
|
+
for i in range(len(A)):
|
22
28
|
|
29
|
+
# tmp = A[i + 1]
|
30
|
+
|
23
|
-
|
31
|
+
for j in range(i - 1, -1, -1):
|
32
|
+
|
33
|
+
tmp = A[i]
|
34
|
+
|
35
|
+
# if A[j] < tmp:
|
36
|
+
|
37
|
+
if A[j] > tmp:
|
38
|
+
|
39
|
+
# for k in range(i + 1, -1, -1):
|
40
|
+
|
41
|
+
# A[k] = A[k - 1] <- この操作で 8 が大量に生成されていました。
|
42
|
+
|
43
|
+
A[i] = A[j]
|
44
|
+
|
45
|
+
A[j] = tmp
|
24
46
|
|
25
47
|
i = j
|
26
48
|
|
27
|
-
else:
|
28
|
-
|
29
|
-
break
|
30
49
|
|
31
50
|
|
51
|
+
A = [1,3,2,8]
|
32
52
|
|
33
|
-
l
|
53
|
+
solution(A)
|
34
54
|
|
35
|
-
|
55
|
+
print(A)
|
36
56
|
|
37
|
-
print(lst)
|
38
|
-
|
39
|
-
```
|
40
|
-
|
41
|
-
```
|
42
|
-
|
43
|
-
>>> lst = [9981, 3333, 5123, 1243, 7412]
|
44
|
-
|
45
|
-
>>> insertion_sort(lst)
|
46
|
-
|
47
|
-
[9981, 3333, 5123, 1243, 7412] 0 1
|
48
|
-
|
49
|
-
[3333, 9981, 5123, 1243, 7412] 1 2
|
50
|
-
|
51
|
-
[3333, 5123, 9981, 1243, 7412] 2 3
|
52
|
-
|
53
|
-
[3333, 5123, 1243, 9981, 7412] 1 2
|
54
|
-
|
55
|
-
[3333, 1243, 5123, 9981, 7412] 0 1
|
56
|
-
|
57
|
-
[1243, 3333, 5123, 9981, 7412] 3 4
|
58
|
-
|
59
|
-
>>> print(lst)
|
60
|
-
|
61
|
-
[1
|
57
|
+
# [1, 2, 3, 8]
|
62
|
-
|
63
|
-
>>>
|
64
58
|
|
65
59
|
```
|
66
60
|
|
67
61
|
|
68
62
|
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
## 2. 改善点
|
70
|
+
|
71
|
+
### 2.1. print 関数で出力
|
72
|
+
|
73
|
+
最後の結果だけでなく、途中結果についても `print(A)` で表示して、自分が意図していない動作を **しはじめた** 箇所を突き止めるといいかなと思います。出力結果だけでデバックは、結構辛いかなと感じます。とは言え、途中結果を出力してもわからないものは、わからないのですが笑
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
### 2.2. reversed 関数
|
80
|
+
|
81
|
+
以下の2つは等価です。
|
82
|
+
|
83
|
+
```python
|
84
|
+
|
85
|
+
range(i - 1, -1, -1)
|
86
|
+
|
87
|
+
reversed(i)
|
88
|
+
|
89
|
+
```
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
### 2.3. 入れ替えの書き方
|
96
|
+
|
97
|
+
変数をいれかえるには
|
98
|
+
|
99
|
+
```python
|
100
|
+
|
101
|
+
# 挿入するために配列のtmpの1つ前から挿入した挿入したい
|
102
|
+
|
103
|
+
# exchangeindexの要素を1つずつ後ろに移動させる
|
104
|
+
|
105
|
+
for k in range(i+1, -1, -1):
|
106
|
+
|
107
|
+
A[k] = A[k-1]
|
108
|
+
|
109
|
+
A[j] = tmp
|
110
|
+
|
111
|
+
```
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
#### 2.3.1. 書き方 1
|
116
|
+
|
117
|
+
```python
|
118
|
+
|
119
|
+
A[i] = A[j]
|
120
|
+
|
121
|
+
A[j] = tmp
|
122
|
+
|
123
|
+
i = j
|
124
|
+
|
125
|
+
```
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
#### 2.3.2. 書き方 2
|
130
|
+
|
131
|
+
Python ではこのように書けます。
|
132
|
+
|
133
|
+
```python
|
134
|
+
|
135
|
+
A[i], A[j] = A[j], A[i]
|
136
|
+
|
137
|
+
```
|
138
|
+
|
139
|
+
|
140
|
+
|
69
|
-
* [Python の
|
141
|
+
* [Python のPython の代入の色々な書き方](https://python.ms/sub/misc/assignment/)
|