2024. 4. 9. 13:00ㆍ복습/알고리즘
병합 정렬 (merge sort)
병합 정렬, 합병 정렬 둘 다 같은 말이다..
병합 정렬은 일단 배열이 더 이상 쪼개지지 않을 때까지 절반으로 계속 쪼갠다.
그리고 조각을 2개씩 묶어 각각을 크기순으로 배열하고
또 그 조각을 2개씩 묶어 크기순으로 배열하는 식이다.
예를 들어, [4, 1, 8, 6, 7, 2, 3, 5] 가 있으면 이런 식으로
원소가 하나 하나 뜯어질 때까지 나눈다.
그리고 더 이상 뜯어지지 않을 정도로 나뉘어졌다면,
이제 반대로 하나 하나 붙이는데, 이 때 정렬을 같이 해준다.
이게 끝이다..!
알고리즘을 이해하는 것 자체는 그리 어렵지 않을 것이다.
분할 정복 알고리즘
하지만 지금까지 설명했던 알고리즘과는 달리 굳이 이렇게 해야하나?
싶을 수도 있을 것 같아 설명을 덧붙이자면,
배열의 크기가 커지면 이런 분할 정복 알고리즘이 더 효율적이다.
분할 정복 알고리즘이란,
큰 배열 하나를 작은 배열 여러 개로 쪼갠 뒤,
하나 하나 맞추어 해결해 나가는 알고리즘을 말한다.
분할 정렬 알고리즘의 예시
1부터 100까지 적힌 카드가 흐트러져 있을 때
우리가 1, 2, 3, 4 .. 순으로 카드를 하나 하나 찾지 않고
먼저 10의 자리대로 카드를 나눈 뒤,
나누어진 10개의 뭉치를 다시 순서대로 배치하는 것 역시
분할 정렬 알고리즘을 사용한 것이라고 볼 수 있다.
분할 정렬 알고리즘이 효율적인 이유
왜 이게 효율적인지 아직 와닿지 않는다면
아래 예시가 도움이 될 것이다.
8명이 같이 가위바위보를 할 때
계속 승부가 나지 않으면
4명 4명 나누어서 가위바위보를 한다.
왜? 4명이 가위바위보를 해서 결과가 나는 게
8명이 가위바위보를 계속 하는 것보다 빠르기 때문이다.
또한, 그렇게 4명 4명 나눈 것보다
2명 2명 2명 2명 이렇게 네 팀으로 가위바위보를 하는 것이 더 빠르다.
따라서 작은 조각으로 나누어 먼저 해결하는 방식은
시간을 줄여주고 효율적이라고 할 수 있다.
'복습 > 알고리즘' 카테고리의 다른 글
[자료구조] 전위 , 중위, 후위 순회란? (0) | 2024.07.02 |
---|---|
[알고리즘] 선택 정렬 C언어 구현하기! (0) | 2024.04.09 |
[알고리즘] 퀵 정렬(quick sort) 쉽게 이해하기! (0) | 2024.04.08 |
[알고리즘] 버블 정렬(bubble sort) 쉽게 이해하기! (0) | 2024.04.08 |
[알고리즘] 삽입 정렬(insertion sort) 쉽게 이해하기! - 책 정리 알고리즘 (0) | 2024.03.18 |