티스토리 뷰

C++/Baekjoon

백준11650: C++ Merge sort

그레고리 2022. 2. 16. 23:16
728x90

코드 전문

Merge sort 복습을 위해 Merge sort로 구현했다. 

#include <iostream>
using namespace std;
#define MAXSIZE 100000

struct Point{
    int x;
    int y;
};

void MergeSorting(Point* list, int start, int end);
void Merge(Point* list, int start, int mid, int end);

Point sorted[MAXSIZE];

int main(){
    ios_base::sync_with_stdio(false);
    
    int pointCnt;
    cin >> pointCnt;
    Point* list = new Point[pointCnt];

    // 좌표 입력
    for(int i=0;i<pointCnt;i++){
        cin >> list[i].x >> list[i].y;
    }

    // 정렬
    MergeSorting(list, 0, pointCnt-1);

    // 결과 출력
    for(int i=0;i<pointCnt;i++){
        cout << list[i].x << " "<< list[i].y<<"\n";
    }

    delete[] list;
    return 0;
}

void MergeSorting(Point* list, int start, int end){
    if(start >= end) return;

    int mid = (start+end)/2;
    MergeSorting(list, start, mid);
    MergeSorting(list, mid+1, end);
    Merge(list, start, mid, end);
}   

void Merge(Point* list, int start, int mid, int end){
    int l = start;
    int r = mid+1;
    int index = start;

    while(l<=mid && r<=end){
        if(list[l].x < list[r].x){
            sorted[index++] = list[l++];
        }else if(list[l].x == list[r].x){
            if(list[l].y < list[r].y) sorted[index++] = list[l++];
            else sorted[index++] = list[r++];
        }else sorted[index++] = list[r++];
    }
    if(l>mid){
        for(int i=r;i<=end;i++) sorted[index++] = list[i];
    }else{
        for(int i=l;i<=mid;i++) sorted[index++] = list[i];
    }

    for(int i=start;i<=end;i++) list[i] = sorted[i];
}
728x90

'C++ > Baekjoon' 카테고리의 다른 글

백준 10825  (0) 2022.02.20
백준2751 : Merge sort(C++)  (0) 2022.02.16
백준 8393, 10818  (0) 2022.02.09
백준 1924  (0) 2022.02.09
백준 10952, 10953, 11021, 11718, 11721  (0) 2022.02.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함