質問編集履歴

4

コード載せました。orz

2019/10/21 04:01

投稿

Sugatail
Sugatail

スコア11

test CHANGED
File without changes
test CHANGED
@@ -49,3 +49,207 @@
49
49
  交換回数を見る限り、降順の方が時間がかかりそうなものですが…。
50
50
 
51
51
  ご教授願えればと思います。
52
+
53
+
54
+
55
+ ```c
56
+
57
+ #include <stdio.h>
58
+
59
+ #include <stdlib.h>
60
+
61
+ #include <string.h>
62
+
63
+ #include <sys/time.h>
64
+
65
+ #include "data.h"
66
+
67
+
68
+
69
+ int swap_counter=0;
70
+
71
+ int comparison_counter=0;
72
+
73
+
74
+
75
+ /* 要素の交換 */
76
+
77
+ void swap(int *a, int i, int j) {
78
+
79
+ int t = a[i];
80
+
81
+ a[i] = a[j];
82
+
83
+ a[j] = t;
84
+
85
+ #if defined(VERBOSE_MODE) || defined(COUNT_SWAP)
86
+
87
+ swap_counter++;
88
+
89
+ #endif
90
+
91
+ }
92
+
93
+
94
+
95
+ /* バブルソート */
96
+
97
+ void bubblesort(int *a, int size) {
98
+
99
+ int i, j;
100
+
101
+ for(i=size-1; i>0; i--) {
102
+
103
+ for(j=0; j<i; j++) {
104
+
105
+ #if defined(VERBOSE_MODE) || defined(COUNT_COMPARISON)
106
+
107
+ comparison_counter++;
108
+
109
+ #endif
110
+
111
+ if (a[j]>a[j+1]) {
112
+
113
+ swap(a, j, j+1);
114
+
115
+ }
116
+
117
+ }
118
+
119
+ }
120
+
121
+ }
122
+
123
+
124
+
125
+ /* 時間計測 */
126
+
127
+ double get_time() {
128
+
129
+ struct timeval tv;
130
+
131
+ gettimeofday(&tv, NULL);
132
+
133
+ return tv.tv_sec + (double)tv.tv_usec*1e-6;
134
+
135
+ }
136
+
137
+
138
+
139
+ /* 使用法の表示 */
140
+
141
+ void print_usage() {
142
+
143
+ fprintf(stderr, "usage: bubblesort data\n");
144
+
145
+ }
146
+
147
+
148
+
149
+
150
+
151
+ int main(int argc, char* argv[]) {
152
+
153
+ if (argc != 2) {
154
+
155
+ print_usage();
156
+
157
+ exit(1);
158
+
159
+ }
160
+
161
+
162
+
163
+ FILE *fp = fopen(argv[1], "r");
164
+
165
+ if (fp == NULL) {
166
+
167
+ fprintf(stderr, "File not found %s\n", argv[1]);
168
+
169
+ exit(1);
170
+
171
+ }
172
+
173
+ int size = read_size(fp);
174
+
175
+ int* data = read_data(fp, size);
176
+
177
+ fclose(fp);
178
+
179
+
180
+
181
+ #ifdef VERBOSE_MODE
182
+
183
+ printf("ソート前\n");
184
+
185
+ print_data(data, size);
186
+
187
+ #endif
188
+
189
+
190
+
191
+ double starting_time = get_time();
192
+
193
+ bubblesort(data, size); // ソート
194
+
195
+ double end_time = get_time();
196
+
197
+ double consumed_time_in_msec = (end_time-starting_time) * 1000;
198
+
199
+
200
+
201
+ #ifdef VERBOSE_MODE
202
+
203
+ printf("\nソート後\n");
204
+
205
+ print_data(data, size);
206
+
207
+ #endif
208
+
209
+
210
+
211
+ #ifdef VERBOSE_MODE
212
+
213
+ printf("size: %d\n", size);
214
+
215
+ printf("swap: %d\n", swap_counter);
216
+
217
+ printf("comparison: %d\n", comparison_counter);
218
+
219
+ printf("time (msec): %f\n", consumed_time_in_msec);
220
+
221
+ #else
222
+
223
+
224
+
225
+ #ifdef COUNT_SWAP
226
+
227
+ printf("%d", swap_counter);
228
+
229
+ #endif
230
+
231
+ #ifdef COUNT_COMPARISON
232
+
233
+ printf("%d", comparison_counter);
234
+
235
+ #endif
236
+
237
+ #if !defined(COUNT_SWAP) && !defined(COUNT_COMPARISON)
238
+
239
+ printf("%f", consumed_time_in_msec);
240
+
241
+ #endif
242
+
243
+
244
+
245
+ #endif
246
+
247
+
248
+
249
+ free_data(data);
250
+
251
+ }
252
+
253
+
254
+
255
+ ```

3

2019/10/21 04:01

投稿

Sugatail
Sugatail

スコア11

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- |比較回数(回)|2500|10000|40000|
25
+ |交換回数(回)|2500|10000|40000|
26
26
 
27
27
  |:--|:--:|:--:|:--:|
28
28
 

2

2019/10/21 02:30

投稿

Sugatail
Sugatail

スコア11

test CHANGED
File without changes
test CHANGED
@@ -46,6 +46,6 @@
46
46
 
47
47
 
48
48
 
49
- 比較回数を見る限り、降順の方が時間がかかりそうなものですが…。
49
+ 交換回数を見る限り、降順の方が時間がかかりそうなものですが…。
50
50
 
51
51
  ご教授願えればと思います。

1

int型の配列にデータを保持。

2019/10/21 02:26

投稿

Sugatail
Sugatail

スコア11

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- |実行時間|2500|10000|40000|
15
+ |実行時間(ms)|2500|10000|40000|
16
16
 
17
17
  |:--|:--:|:--:|:--:|
18
18
 
@@ -22,7 +22,7 @@
22
22
 
23
23
 
24
24
 
25
- |比較回数|2500|10000|40000|
25
+ |比較回数(回)|2500|10000|40000|
26
26
 
27
27
  |:--|:--:|:--:|:--:|
28
28
 
@@ -32,9 +32,17 @@
32
32
 
33
33
 
34
34
 
35
+ [追記]
36
+
37
+ データはint型の整数で、テキストデータからint型配列へ読み出しています。
38
+
39
+ また実行時間はソートの開始から終了までを図っています。
40
+
41
+
42
+
35
43
  ### 問題
36
44
 
37
- **何故降順の方が実行時間が短くすんでいるのか**、という点が分かりません。
45
+ **降順の方が実行時間が短くすんでいる理由**が分かりません。
38
46
 
39
47
 
40
48