-
2751-병합정렬[아직 해결못함] 본문
Run Time Error code
#include <iostream>
using namespace std;
void merge_sort(int a[],int S, int E);
void merges(int a[],int S, int M, int E);
int main()
{
//int arr[1000000]={0,};
int *arr = new int[1000000];
int N=0;
cin>>N;
for(int i=0; i<N; i++)
cin>>arr[i];
merge_sort(arr,0,N-1);
for(int i=0; i<N; i++)
cout<<arr[i]<<endl;
delete(arr);
return 0;
}
void merge_sort(int a[],int S, int E)
{
int M = (S+E)/2;
if(E-S<1) return;
merge_sort(a,S,M);
merge_sort(a,M+1,E);
merges(a,S,M,E);
}
void merges(int a[],int S, int M, int E)
{
int i=S; int j=M+1; int k=S; // 이부분에서 사실 왜 굳이 새로운 배열에 담아야하는지 이해가 가지 않았다. 하지만 새로운 배열 없이 그냥
int size_arr = E-S+1; // loop로 탐색 해버리면 버블 정렬을 recursive하게 계속 하는 방식이 되버린다.
int temp[size_arr]={0,};
while(i<=M&&j<=E)
{
if(a[i]<a[j])
{
temp[k] = a[i]; i++;
}
else
{
temp[k] = a[j]; j++;
}
k++;
}
if(i>M)
{
for(int m=j;m<=E;m++)
{
temp[k] = a[m];
k++;
}
}
else
{
for(int m = i; m<=M;m++)
{
temp[k] = a[m];
k++;
}
}
for(int m=S;m<=E;m++)
{
a[m] = temp[m];
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
10828-스택기초 (0) | 2018.01.11 |
---|---|
10989 - 기수정렬[아직 해결못함] (0) | 2018.01.10 |
2750 - 버블정렬 (0) | 2018.01.09 |
6064 카잉달력 (0) | 2018.01.09 |
1475 (0) | 2018.01.04 |