Try
[알고리즘/자료구조] 분할 합병 정렬(Merge Sort) 본문
분할 합병 정렬(Merge Sort)
합병 정렬 또는 병합 정렬(merge sort)은 O(n log n) 비교 기반 정렬 알고리즘이다. 일반적인 방법으로 구현했을 때 이 정렬은 안정 정렬에 속하며, 분할 정복 알고리즘의 하나이다. 존 폰 노이만이 1945년에 개발했다.
소스
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | /* /* /* khsh5592@naver.com /* has3ong.tistory.com /* /* 2018 - 11 - 16 /* */ #include <iostream> #include <stdio.h> #include <conio.h> using namespace std; int Data[16] = {9, 19, 62, 5, 55, 33, 12, 23, 4, 123, 85, 1, 18, 6, 3, 11}; int Copy_Data[16]; void print() { cout << " Data Array is [ " ; for (int i = 0; i < 16; i++) { cout << Data[i] << " "; } cout << "] "<< endl; } void TopDownMerge(int A[], int left, int middle, int right, int B[]) { int i = left; int j = middle; for(int k = left; k < right; k++) { if( i < middle && ( j >= right || A[i] <= A[j])) { B[k] = A[i]; i++; } else { B[k] = A[j]; j++; } } print(); } void TopDownSplitMerge(int B[], int left, int right, int A[]) { if(right - left < 2) { return; } int middle = (left+right) / 2; TopDownSplitMerge(A, left, middle, B); TopDownSplitMerge(A, middle, right, B); TopDownMerge(B, left, middle, right, A); } void CopyArray(int A[], int left, int right, int B[]) { for(int k = left; k< right; k++) { B[k] = A[k]; } } void TopDownMergeSort(int A[],int B[],int n) { CopyArray(A,0,n,B); TopDownSplitMerge(B,0,n,A); } void main() { int length = sizeof(Copy_Data) / sizeof(Copy_Data[0]); TopDownMergeSort(Data, Copy_Data, length); getch(); } | cs |
출처
위키피디아
https://en.wikipedia.org/wiki/Merge_sort
'Algorithm > Algorithm 기초' 카테고리의 다른 글
[알고리즘/자료구조] 트리 구조 (Tree) (0) | 2018.11.22 |
---|---|
[알고리즘/자료구조] 셸 정렬(Shell sort) (0) | 2018.11.16 |
[알고리즘/자료구조] 선택 정렬 (Selection Sort) (0) | 2018.11.16 |
[알고리즘/자료구조] 삽입정렬 (insertion sort) (0) | 2018.11.16 |
[알고리즘/자료구조] 큐 (Queue) (0) | 2018.11.11 |
Comments