김호쭈
DevForYou
김호쭈
전체 방문자
오늘
어제
  • 분류 전체보기 (321)
    • • 데이터베이스(DB) (9)
      • __SQL__ (9)
    • •알고리즘(Algorithm ) (117)
      • 문제풀이 (99)
      • 스터디 (14)
      • 알고리즘 팁 (4)
    • •Compter Science (57)
      • Operating System (25)
      • Computer Network (1)
      • Computer Vision (16)
      • Artificial Intelligence (14)
      • Software Technology (1)
    • • 독서 (36)
      • Design Pattern (24)
      • 객체지향의 사실과 오해 (1)
      • Object Oriented Software En.. (11)
    • • 개발 (26)
      • React (3)
      • node.js (6)
      • Django (11)
      • Spring boot (6)
    • • 개발Tip (4)
      • GitHub (0)
    • •프로젝트 (2)
      • 물물 (2)
    • •App (54)
      • 안드로이드 with Kotlin (50)
      • 코틀린(Kotiln) (4)
    • •회고 (8)
    • •취준일기 (3)
    • • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • KMU_WINK
  • local저장소
  • Remote저장소
  • 깃허브데스크탑
  • ㄱ
  • 원격저장소
  • 로컬저장소
  • GitHubDesktop

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김호쭈

DevForYou

•알고리즘(Algorithm )/스터디

[알고리즘] 병합정렬(merge-sort) 파이썬

2022. 7. 24. 00:56

# 정리

merge(left,right)함수를 만들어 두 리스트를 순차적으로 비교하면서 정렬하는 것 까지는 쉽게 했는데, 이 함수들을 재귀적으로 계속 호출해서 정렬시키는 방법을 잘 모르겠어서 꽤 오랜 시간이 걸렸다. 

아직은 재귀가 익숙하지 않은거 같다.

 

# 코드

import random


def merge(left, right):
  sorted = []
  lptr, rptr = 0, 0
  while lptr < len(left) and rptr < len(right):
    if left[lptr] < right[rptr]:
      sorted.append(left[lptr])
      lptr += 1
    else:
      sorted.append(right[rptr])
      rptr += 1

  if( lptr < len(left)) :
    for i in range(lptr,len(left)) :
      sorted.append(left[i])
  elif ( rptr < len(right)) :
    for i in range(rptr, len(right)):
      sorted.append(right[i])
  print(f"merge {sorted}")
  return sorted

def merge_sort(data) :
  print("merge_sort called")
  if len(data) <= 1:
    return data
  pivot = len(data) // 2
  left = merge_sort(data[:pivot])
  right = merge_sort(data[pivot:])
  print(left,right)
  return merge(left,right)

if __name__ == '__main__':
  sample = [4, 3, 7, 2, 6, 8, 9, 0, 1, 5]
  answer = merge_sort(sample)
  print(f"sorted : {answer}")

 

#참고

코드 실행 순서 시각화 해주는 사이트

 

Python Tutor: Learn Python, JavaScript, C, C++, and Java by visualizing code

Learn Python, JavaScript, C, C++, and Java This coding tutor tool helps you learn Python, JavaScript, C, C++, and Java by visualizing code execution. You can use it to debug your homework assignments and as a supplement to online coding tutorials. Related

pythontutor.com

 

저작자표시 (새창열림)

'•알고리즘(Algorithm ) > 스터디' 카테고리의 다른 글

[알고리즘] 순차탐색 파이썬 시간복잡도  (0) 2022.07.26
[알고리즘] 이진탐색 파이썬 및 시간복잡도  (0) 2022.07.26
[알고리즘] 재귀함수 파이썬, 회문검사  (0) 2022.07.23
[알고리즘] 선택 정렬 파이썬  (0) 2022.07.22
[알고리즘] 삽입정렬 파이썬  (0) 2022.07.22
    '•알고리즘(Algorithm )/스터디' 카테고리의 다른 글
    • [알고리즘] 순차탐색 파이썬 시간복잡도
    • [알고리즘] 이진탐색 파이썬 및 시간복잡도
    • [알고리즘] 재귀함수 파이썬, 회문검사
    • [알고리즘] 선택 정렬 파이썬
    김호쭈
    김호쭈
    공부하고 정리하고 기록하기

    티스토리툴바