나는개발자니까
[Algorithm] 머지 정렬 (Merge Sort) 본문
머지 정렬 (Merge Sort)
머지 정렬 : 원소가 저장되어 있는 배열을 계속 나눠서 길이가 1인 배열을 만들고 정렬하면서 합치는 알고리즘이다.
(머지 정렬 = 병합 정렬 = 합병 정렬 모두 같은 말이다.)
머지 정렬 (Merge Sort)의 시간 복잡도
머지 정렬은 이진 트리 형태로 나누기 떄문에 가질 수 있는 최대 깊이는 log n이다. 각 원소별로 합쳤으므로 시간 복잡도는 O(nlogn)이다.
머지 정렬 (Merge Sort)의 구현
public class Main {
public static int[] src;
public static int[] tmp;
public static void main(String[] args) {
src = new int[](1, 9, 8, 5, 4, 2, 3, 7, 6);
tmp = new int[src.length];
printArray(src); //
mergeSort(0, src.length - 1);
printArray(src);
}
public static void mergeSort(int start, int end) {
if (start < end) {
int mid = (start + end) / 2;
mergeSort(start, mid);
mergeSort(mid + 1, end);
int p = start;
int q = mid + 1;
int idx = p;
while (q <= mid || q <= end) {
if (q > end || (q <= mid && src[p] < src[q])) {
tmp[idx++] = src[q++];
else {
tmp[idx++] = src[q++];
}
}
for (int i = start; i <= end; i++) {
src[i] = tmp[i];
}
}
}
public static void printArray(int[] a) {
for (int i = 0; i < a.length; i++)
System.out.print(a[i] + " ");
System.out.println();
}
}
출처
https://ko.wikipedia.org/wiki/%ED%95%A9%EB%B3%91_%EC%A0%95%EB%A0%AC
'Algorithm' 카테고리의 다른 글
[Algorithm] 4. 알고리즘의 시간 복잡도 분석 (0) | 2023.04.04 |
---|---|
[Algorithm] 기수 정렬 (Radix Sort) (0) | 2023.03.21 |
[Algorithm] 힙 정렬 (Heap Sort) (0) | 2023.03.21 |
[Algorithm] 퀵 정렬 (Quick Sort) (0) | 2023.03.20 |
[Algorithm] 버블정렬 (Bubble Sort) (0) | 2023.03.20 |