티스토리 뷰
병합정렬은 어떤 경우에도 O(NlogN)의 시간복잡도를 보장합니다.
현재 정렬 순서에 상관없이 분할정복 기법에 의해 일단 반으로 나누고 합치는 과정을 통해 정렬을 수행합니다.
중간 정렬 결과를 담을 임시 변수가 필요하기에 O(N)의 공간복잡도를 가집니다.
C++ 소스 코드
#include <iostream>
using namespace std;
int temp[10], nums[10] = {3,6,1,2,9,7,4,5,10,8};
void merge(int s, int m, int e){
int i=s;
int j= m+1;
int k=s;
while(i<=m &&j<=e){
if (nums[i]<nums[j]){
temp[k] = nums[i];
i++;
}else {
temp[k] = nums[j];
j++;
}
k++;
}
if (i>m){
for(int t=j;t<=e;t++){
temp[k]=nums[t];
k++;
}
}
if (j>e){
for(int t=i;t<=e;t++){
temp[k]=nums[t];
k++;
}
}
for(int t=s;t<=e;t++){
nums[t] = temp[t];
}
}
void merge_sort(int s, int e){
if (s<e){
int m = (s+e)/2;
merge_sort(s,m);
merge_sort(m+1,e);
merge(s,m,e);
}
}
int main(){
merge_sort(0,9);
for(int i=0;i<10;i++){
cout << nums[i] <<' ';
}
return 0;
}
'Algorithm > 알고리즘 개념' 카테고리의 다른 글
C++) 버블정렬 (Bubble Sort) (0) | 2020.11.23 |
---|---|
C++ / Swift ) 퀵정렬 (Quick Sort) (0) | 2020.06.19 |
C++ / Swift ) 삽입정렬 (Insertion Sort) (0) | 2020.06.18 |
C++ / Swift ) 선택정렬 (Selection Sort) (0) | 2020.06.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- bounds
- GraphDB
- rxswift
- Kotlin
- 카카오인턴십
- infallible
- DispatchQueue
- 코코아팟
- blendshape
- 안드로이드
- blendshapes
- disposeBag
- coreml
- ARKit
- SwiftUI
- boj
- mergesort
- SWEA
- cocoapods
- C++
- Swift
- 프로그래머스
- Reactivex
- 백준
- 백준온라인저지
- Lottie
- Neo4j
- 알고리즘
- rxswift6
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함