[Algorithm] 합병정렬(merge sort)

2024. 4. 11. 17:41· Computer Science/Algorithm&DataStructure
728x90

✨ 합병정렬(merge sort)

합병 정렬은 O(n log n) 비교 기반 정렬 알고리즘이다. 일반적인 방법으로 구현했을 때 이 정렬은 안정 정렬에 속하며, 분할 정복 알고리즘의 하나이다.
(분할정복:그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 방법)

 

✨ 과정(2-way 합병 정렬)

  1. 길이가 1이하임을 확인(1이하인경우 정렬완료상태)
  2. 분할: 리스트를 절반으로 나눈다.
  3. 정복:각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬
  4. 결합:두 부분 리스트를 다시 하나의 정렬된 리스트로 합병( 임시배열에 저장 )
  5. 복사:임시 배열에 저장된 결과를 원래 배열에 복사
def merge_sort(arr):
    #길이 1이하확인
    if(arr<=1):return arr

    #분할
    low_arr=merge_sort(arr[:len(arr)//2])
    high_arr=merge_sort(arr[len(arr)//2:])
    
    merged_arr = []
    l = h = 0
    #어느 한쪽이 전부 merged_arr에 들어가면 끝
    while l < len(low_arr) and h < len(high_arr): 
        if low_arr[l] < high_arr[h]:
            merged_arr.append(low_arr[l])
            l += 1
        else:
            merged_arr.append(high_arr[h])
            h += 1
    
    #정렬하고 남은 arr는 정렬된 상태이므로 merged_arr 에 이어서 추가
    merged_arr += low_arr[l:]
    merged_arr += high_arr[h:]
    return merged_arr

 

 

 

 

🎈참고자료

https://ko.wikipedia.org/wiki/%ED%95%A9%EB%B3%91_%EC%A0%95%EB%A0%AC

https://www.daleseo.com/sort-merge/

 

 

 

 

 

 

728x90

'Computer Science > Algorithm&DataStructure' 카테고리의 다른 글

[Algorithm] 백트래킹(backtracking)  (0) 2024.04.11
[Algorithm] 조합론(combinatorics)  (0) 2024.04.11
[Algorithm] 유클리드 호제법(Euclidean algorithm)  (0) 2024.04.10
'Computer Science/Algorithm&DataStructure' 카테고리의 다른 글
  • [Algorithm] 동적 계획법(dynamic programming)
  • [Algorithm] 백트래킹(backtracking)
  • [Algorithm] 조합론(combinatorics)
  • [Algorithm] 유클리드 호제법(Euclidean algorithm)
아사_
아사_
프로그래밍 공부한거 정리해두는 메모장 블로그
아사_
개발공부 블로그
아사_
전체
오늘
어제
  • 분류 전체보기
    • FrontEnd
      • html
      • css
      • JavaScript
      • Node.js
      • React
      • React Native
    • BackEnd
      • SpringBoot
      • FastAPI
      • PHP
      • Flask
      • supabase
    • Language
      • Python
      • JAVA
      • Kotlin
      • C++
    • Development Tools
      • AWS
      • GIT,GITHUB
      • Docker
      • 메시지 브로커
      • 기타 도구,플랫폼
    • Computer Science
      • 개발지식
      • Server&Network
      • Algorithm&DataStructure
      • Security
      • DataBase
      • OS
    • AI
    • 기타
      • 잡다
      • Android
      • 도서
    • 클론코딩
      • 생활코딩 Express.js
      • 점프 투 장고
      • 생활코딩 Node.js
    • 프로젝트
      • DevQuest

인기 글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.2
아사_
[Algorithm] 합병정렬(merge sort)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.