Info-Tech

Merge Sort 본문

알고리즘

Merge Sort

개발 로그를 쌓고 싶은 블로거 2018. 10. 23. 20:13
최악일때도 (nlogn)
N개를 정렬하는 알고리즘이다.
n개를  n/2로 나눈다.
그리고 왼쪽 n/2개와 오른쪽 n/2를 정렬한다.
정렬한 결과를 합친다.


void sort(int start, int end){
    
    if (start == end){
        return;
    }
    
    int mid = (start+end)/2;
    
    sort(start, mid);
    sort(mid+1,end);
    merge(start,end);


}


void merge(int start, int end){
    
    int mid = (start+end)/2;
    int s = start;
    int j = mid+1;
    int k = 0;

    //위에서 정해진 구간에 맞게끔 값 넣어주기
    while( s <= mid && j <=end){
        
        //앞에꺼 그대로 저장
        if(a[s] <= a[j]{
            b[k++] = a[s++];
        }
        //뒤에 값 저장
        else{
            b[k++] = a[j++];
        }
    }
    
    //나머지 부분 채워주기
    while (s<=mid) b[k++] = a[s++];
    while (j<=end) b[k++] = a[j++];
    
    //원래 배열에 다시 넣어주기
    for(int i=start; i<=end; i++){
        a[i] = b[i-start];
    }

}


'알고리즘' 카테고리의 다른 글

플로이드 와샬  (0) 2018.10.25
그리디 알고리즘  (0) 2018.10.25
이진탐색  (0) 2018.10.24
유니온 파인드  (0) 2018.10.24
다익스트라 알고리즘  (0) 2018.10.23
Comments