일지
알고리즘...11
niamdank
2021. 6. 22. 21:40
테스트용 난수 생성 및 시간 체크 함수 구현
알고리즘의 효율성 테스트를 위해 1,000,000 개의 난수를 생성하여 텍스트 파일로 저장 및 불러오기 함수 구현
common.hpp
#pragma once
#include <iostream>
#include <fstream>
#include <ctime>
#define MAKE_RANDOM_NUMBERS
#ifdef MAKE_RANDOM_NUMBERS
#include <random>
#include <limits>
#endif
namespace Common
{
#ifdef MAKE_RANDOM_NUMBERS
int* GenerateRandomNumber(int n = 100'000)
{
std::default_random_engine randomEngine;
std::uniform_int_distribution<int> distribution(0, INT_MAX);
int* arr = new int[n];
for (int i = 0; i < n; ++i)
{
arr[i] = distribution(randomEngine);
}
return arr;
}
void MakeRandomNumbersFile(int n = 100'000)
{
int* arr = GenerateRandomNumber(n);
std::ofstream ofs("./Randoms.txt");
ofs << n << "; ";
for (int i = 0; i < n; ++i)
{
ofs << arr[i] << "; ";
}
ofs.close();
}
#endif
#pragma region 파일 입출력
int LoadRandomNumbersInFile(int** arr)
{
std::ifstream ifs("./Randoms.txt");
int n;
ifs >> n;
*(arr) = new int[n];
for (int i = 0; i < n; ++i)
{
ifs >> (*arr)[i];
}
ifs.close();
return n;
}
#pragma endregion
#pragma region 시간 측정
std::clock_t startTime;
std::clock_t endTime;
void StartClock()
{
startTime = std::clock();
}
void StopClock()
{
endTime = std::clock();
}
void PrintElapsedTime()
{
std::clock_t elapsed = endTime - startTime;
double timeSecond = static_cast<double>(elapsed / CLOCKS_PER_SEC);
std::cout << "total time is " << timeSecond << "s ( " << elapsed << "ms )\n";
}
#pragma endregion
}
선택 정렬 시간 측정
main.cpp
#include "Sort/SelectionSort.hpp"
#include "Common.hpp"
int main()
{
int n = 10;
int* arr;
// 동작 테스트를 위한 값
//arr = new int[n]{ 2, 4, 6, 8, 10, 9, 7, 5, 3, 1 };
// 시간 테스트를 위한 값
n = Common::LoadRandomNumbersInFile(&arr);
Common::StartClock();
SelectionSort(arr, n/*/, true/**/);
Common::StopClock();
Common::PrintElapsedTime();
delete[] arr;
}
측정 결과
total time is 452s ( 452361ms )
Algorithm/Randoms.txt at main · NadanKim/Algorithm · GitHub
NadanKim/Algorithm
알고리즘 학습 및 예제 코드 작성을 위한 저장소. Contribute to NadanKim/Algorithm development by creating an account on GitHub.
github.com