-

2751-병합정렬[아직 해결못함] 본문

Algorithm/Baekjoon

2751-병합정렬[아직 해결못함]

Boogallee 2018. 1. 10. 10:53

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
Comments