일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- spring formatter
- 스프링
- 스프링부트 도커
- java predicate
- 수정자주입
- 스프링시큐리티
- kotlin 리팩터링
- IOC
- method refetence
- ioc컨테이너
- 동적파라미터
- 소프트웨어의 품격
- fetch join
- kotlin ::
- Spring
- 그래프큐엘
- Atomicity
- jpa lazy
- 정적팩토리메서드
- 비기능적 요구사항
- 기능적 요구사항
- 도커 이미지 빌드
- jpa no session
- 스프링di
- open-session-in-view
- 스프링 포매터
- 자바 필터
- 생성자주입
- 토비의 스프링
- 스프링 시큐리티 설정
Archives
- Today
- Total
공부기록
합병정렬 본문
반응형
합병정렬(merge sort)
분할정복법을 이용한 정렬이다.
분할정복법 ?
분할 : 해결하고자 하는 문제를 작은 크기의 동일한 문제들로 분할
정복 : 각각의 작은 문제를 순환적으로 해결
합병 : 작은 문제의 해를 합하여(merge) 원래문제에 대한 해를 구함.
- 데이터가 저장된 배열을 절반으로 나눔
- 각각을 순환적으로 정렬
- 정렬된 두 개의 배열을 합쳐 전체를 정
{'A','L','G','O','R','O','T','H','M','S'}
- {'A','L','G','O','R'} , {'O','T','H','M','S'}
- {'A','G','L','O','R'}, {'H','I','M','S','T'}
- {'A','G','H','I','L','M','O','R','S','T'}
{1,2,2,3,4,5,6,7}
{2,4,5,7}
- {2,5}
- {2}. {5}
- {4,7}
- {4}, {7}
- {2,5}
{1,2,3,6}
{1,3}
- {1},{3}
{2,6}
{2},{6}
mergeSort(A[], p, r) -> A[p...r]을 정렬한다. { if(p < r) then { q <- (p+r) / 2 -----> 1. p, r의 중간 지점 계산 mergeSort(A, p, q); -----> 2. 전반부 정렬 mergeSort(A, q+1, r); ----> 3. 후반부 정렬 merge(A, p, q, r); ------> 4. 합병 } }
merge(A[], p, q, r) { 정렬되어있는 두 배열 A[p...q]와 A[q+1...r] 을 합하여 정렬된 하나의 배열 A[p...r]을 만든다. }
void merge(int data[], int p, int q, int r) { int i = p; j = q+1, k=p int temp[data.length()]; while( i<=q && j<=r ) { if(data[i]<=data[j]) temp[k++] = data[i++]; else temp[k++] = data[j++]; }
while(i <= q)
temp[k++] = data[i++];
while(j <= r)
temp[k++] = data[j++];
for(int i = p; i <= r; i++)
data[i] = temp[i];
}
반응형
'Computer Science > 자료구조' 카테고리의 다른 글
[HashTable] JAVA로 간단히 구현해보며 HashTable을 알아보자! (1) | 2020.06.27 |
---|---|
[자료구조] 스택 (0) | 2020.05.22 |
기본적인 정렬(선택정렬, 버블정렬, 삽입정렬) (0) | 2020.01.12 |
ArrayList의 add(T t)와 addAll(Collection<? extends T> collection)을 구현해보자. (0) | 2019.10.09 |
[한국방송통신대학교 자료구조] 1강 자료구조란? (0) | 2019.10.08 |