파게로그
[백준 2751번] 수 정렬하기 2 본문
문제 링크: 2751번 수 정렬하기 2
https://www.acmicpc.net/problem/2751
merge sort를 C++로 구현해 보았다.
#include <iostream>
#include <vector>
using namespace std;
vector<int> sliceVector(vector<int> arr, int start, int end) {
// arr[end]는 결과에 포함되지 않는다.
// 파이썬에서 슬라이싱과 동일하게 구현했다.
vector<int> res;
for (int i=start; i<end; i++) {
res.push_back(arr[i]);
}
return res;
}
void printVector(vector<int> arr) {
for (int i=0; i<arr.size(); i++) {
cout << arr[i] << '\n';
}
}
vector<int> merge(vector<int> left, vector<int> right) {
vector<int> res;
int i=0, j=0;
while((i<left.size())&&(j<right.size())) {
if (left[i]<=right[j]) {
res.push_back(left[i++]);
} else {
res.push_back(right[j++]);
}
}
while(i<left.size()) res.push_back(left[i++]);
while(j<right.size()) res.push_back(right[j++]);
return res;
}
vector<int> mergeSort(vector<int> arr) {
// 배열 길이가 0 또는 1이면 그대로 return
if (arr.size() <= 1) {
return arr;
}
// left와 right로 슬라이스
vector<int> left = sliceVector(arr, 0, arr.size()/2);
vector<int> right = sliceVector(arr, arr.size()/2, arr.size());
// left와 right를 정렬
left = mergeSort(left);
right = mergeSort(right);
// left와 right를 병합
return merge(left, right);
}
vector<int> init() {
int n; cin >> n;
vector<int> arr;
for (int i=0; i<n; i++) {
int temp; cin >> temp;
arr.push_back(temp);
}
return arr;
}
int main(void) {
vector<int> arr = init();
arr = mergeSort(arr);
printVector(arr);
}
'콤퓨타 왕왕기초 > PS' 카테고리의 다른 글
[백준 10989번] 수 정렬하기 3 (0) | 2020.11.12 |
---|---|
[정렬] counting sort (0) | 2020.11.11 |
[백준 2750번] 수 정렬하기 (0) | 2020.11.11 |
[정렬] quick sort (0) | 2020.11.09 |
[정렬] insertion sort (0) | 2020.11.09 |
Comments