前提・実現したいこと
選択ソートの実行時間を計測するために、ソートを複数回繰り返した後、その合計実行時間を実行回数で割って出力するプログラムを書きたいです。一定以下の実行回数では実現できています。
実行環境はWindows10, VSCodeです。
発生している問題・エラーメッセージ
大きさがSIZE
の配列の全要素に乱数を入れてそれを選択ソートする、というのをCOUNT
回繰り返すプログラムを書いたのですが、COUNT
が1000程度より大きくなると、selectionSort(a)
の行で例外エラーを吐いて止まってしまいます。
COUNT
が1000以下だと普通に動作します。
例外が発生すると、VSCodeのデバッグ欄の「CALL STACK」->「Thread #1」の欄に「PAUSED ON EXCEPTION」と表示されます。コールスタックは以下のような感じです。エラーメッセージは表示されませんでした。
__mingwthr_run_key_dtors.part.0 (Unknown Source:0) __mingw_TLScallback (Unknown Source:0) __dyn_tls_dtor (Unknown Source:0) ntdll.dll!ntdll!RtlActivateActivationContextUnsafeFast (Unknown Source:0) ntdll.dll!ntdll!RtlActivateActivationContextUnsafeFast (Unknown Source:0) ntdll.dll!ntdll!LdrShutdownProcess (Unknown Source:0) ntdll.dll!ntdll!RtlExitUserProcess (Unknown Source:0) kernel32.dll!KERNEL32!FatalExit (Unknown Source:0) msvcrt.dll!msvcrt!_exit (Unknown Source:0) msvcrt.dll!msvcrt!_initterm_e (Unknown Source:0) __tmainCRTStartup (Unknown Source:0) mainCRTStartup (Unknown Source:0)
該当のソースコード
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <windows.h> 4#define SIZE 100 5#define COUNT 1100 6 7int main() { 8 long start_time, end_time; 9 double process_time; 10 srand(GetTickCount()); 11 static int a[SIZE]; 12 int i, j; 13 14 start_time = GetTickCount(); 15 for(i = 0; i < COUNT; i++) { 16 for(j = 0; j < SIZE; j++) { 17 a[i] = rand(); 18 } 19 selectionSort(a); 20 } 21 end_time = GetTickCount(); 22 23 printf("%ld, %ld\n", start_time, end_time); 24 process_time = (double)(end_time - start_time) / 1000.0 / COUNT; 25 printf("実行時間: %.6f\n", process_time); 26} 27 28void selectionSort(int *a) {; 29 int min, i, j, tmp, min_index; 30 for(i = 0; i < SIZE; i++) { 31 min = a[i]; 32 min_index = i; 33 for(j = i + 1; j < SIZE; j++) { 34 if(a[j] < a[min_index]) { 35 min = a[j]; 36 min_index = j; 37 } 38 } 39 tmp = a[i]; 40 a[i] = a[min_index]; 41 a[min_index] = tmp; 42 } 43}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/04 19:05