Merge Sort

Pseudocode

mergeSort

public static void mergeSort(int n, keytype[] s)
    {
        if(n>1){ //종료 조건 : 나눌 수 없을 때 까지 나눔
            const int h=floor(n/2), m=n-h; //반으로 자름
            keytype[] U=new keytype[0..h-1]; //크기 h
            keytype[] V=new keytype[0..m-1]; //크기 m

            //Divide
            copy S[0:h-1] to U[0:h-1];
            copy S[h:n-1] to V[0:m-1];
            //Conquer
            mergeSort(h,U);
            mergeSort(m,V);
            //Combine
            merge(h,m,U,V,S);
        }
    }

merge



 public static void merge(int h, int m, keytype[] U, keytype[] V, keytype S)
    {
        index i=0, j=0, k=0;
        while(i<h && j<m){
            if(U[i]<V[j]){ //U배열의 값이 더 작으면 그 값을 S배열에 넣고 i+1인덱스로 
                S[k]=U[i];
                i++;
            }else{
                S[k]=V[j];
                j++;
            }
            k++;
        }
        if(i>=h) //U배열의 값이 다 S로 옮겨졌으면 V배열의 남은 부분을 S뒤에 붙인다.
            copy V[j:m-1] to S[k:h+m-1];
        else
            copy U[i:h-1] to S[k:h+m]-1;
    }


시간 복잡도와 공간 복잡도

  • Best, Average, Worst case 시간 복잡도 : O(nlogn)
  • 공간 복잡도 : O(n)


  • Best case Time Complexity of Merge
    : 왼쪽 배열(U)의 모든 원소가 오른쪽 배열(V)의 첫번째 원소보다 작을 때
    -> 왼쪽 배열(U)의 크기(h) 만큼 비교가 일어난다.
    => 시간 복잡도 : h



  • Worst case Time Complexity of Merge
    : 왼쪽 배열(U)의 마지막 원소를 제외한 원소들이 오른쪽 배열(V)의 첫번째 원소보다 작고, 왼쪽 배열(U)의 마지막 원소가 오른쪽 배열(V)의 나머지 원소보다 클 때
    -> 왼쪽 배열의 원소들을 다 비교(h)하고 오른쪽 배열의 첫원소 빼고 다 비교(m-1)하게된다.
    => 시간 복잡도 : h+m-1



  • WortCase Time Complexity of MergeSort


'Argorithm > 정렬 알고리즘' 카테고리의 다른 글

Bubble Sort  (0) 2017.08.20
Insertion Sort  (0) 2017.08.20

+ Recent posts