#include<iostream>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include "sort.h"
#pragma warning (disable : 4996)
const int N = 10000;
int b[N + 1] , a[N+1];
void MergeSort(int a[], int l, int r)
{
int i, j, k, m;
if (r > l)
{
m = (r + l) / 2;
MergeSort(a, l, m);
MergeSort(a, m + 1, r);
for (i = m + 1; i > l; i--) b[i - 1] = a[i - 1];
for (j = m; j < r; j++) b[r + m - j] = a[j + 1];
for (k = l; k <= r; k++)
a[k] = b[i] < b[j] ? b[i++] : b[j--];
}
}
int main()
{
int i;
double start_time;
srand(time(NULL));
for (i = 1; i <= N; i++) a[i] = rand();
start_time = clock();
MergeSort(a, 1, N);
cout << "(난수값을 갖는 랜덤 배열일때) 합병 정렬의 실행 시간 (N = " << N << ") : " << (clock() - start_time)/CLOCKS_PER_SEC << "초" << endl;
CheckSort(a, N);
cout << endl;
int reverse = N;
for (i = 1; i <= N; i++) a[i] = reverse--;
start_time = clock();
MergeSort(a, 1, N);
cout << "(역순으로 정렬된 배열일때) 합병 정렬의 실행 시간 (N = " << N << ") : " << (clock() - start_time)/CLOCKS_PER_SEC << "초" << endl;
CheckSort(a, N);
cout << endl;
for (i = 1; i <= N; i++) a[i] = i;
start_time = clock();
MergeSort(a, 1, N);
cout << "(정렬된 배열) 합병 정렬의 실행 시간 (N = " << N << ") : " << (clock() - start_time) / CLOCKS_PER_SEC << "초" << endl;
CheckSort(a, N);
cout << endl;
system("pause");
return 0;
}
'알고리즘' 카테고리의 다른 글
Programmers - 호텔대실 155651번 (0) | 2023.02.09 |
---|---|
Vector 2차원 동적 할당 해보리기 (0) | 2018.04.03 |
Visual Studio 2017 (C++) 자연 합병 정렬 (0) | 2017.11.04 |
1장) 알고리즘과 문제해결 (0) | 2017.10.19 |
(C++) 칵테일 쉐이크 정렬 - (ADL 추가) (0) | 2017.09.26 |