알고리즘

[백준/퀵소트/C++] 11728번 배열 합치기

데메즈 2023. 1. 4. 13:17
728x90
반응형

https://www.acmicpc.net/problem/11728

11728번: 배열 합치기

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거

www.acmicpc.net

두가지 방법으로 풀었는데 표준 라이브러리를 사용하는 방법과 퀵소트를 구현하는 방법으로 풀었다

표준 라이브러리 이용
#include <bits/stdc++.h>

using namespace std;

int n, m;
vector<int> a;

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;

    for(int i=0; i<n; i++){
        int x;
        cin >> x;
        a.push_back(x);
    }

    for(int i=0; i<m; i++){
        int x;
        cin >> x;
        a.push_back(x);
    }

    sort(a.begin(), a.end());

    for(int i : a){
        cout << i << ' ';
    }

    return 0;
}

퀵소트 구현
#include <bits/stdc++.h>

using namespace std;

int n, m;
vector<int> a;

void quickSort(vector<int>& target, int start, int end){
    if(start >= end) return;
    int pivot = start;
    int left = start + 1;
    int right = end;

    while(left <= right){
        while(left<=end && a[left]<=a[pivot]) left++;
        while(right>start && a[right]>=a[pivot]) right--;

        if(left > right) swap(a[pivot], a[right]);
        else swap(a[left], a[right]);
    }

    quickSort(target, start, right-1);
    quickSort(target, right+1, end);
}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;

    for(int i=0; i<n; i++){
        int x;
        cin >> x;
        a.push_back(x);
    }

    for(int i=0; i<m; i++){
        int x;
        cin >> x;
        a.push_back(x);
    }

    quickSort(a, 0, a.size()-1);

    for(int i : a){
        cout << i << ' ';
    }

    return 0;
}
728x90
반응형