컴퓨터 과학 주제 둘러보기정렬합병 정렬 코드 짜기

Q

합병정렬 무한루프 오류

조회 868

좋아요 2

2018년 7월 2일

댓글 5

2019년 5월 30일
merge함수에서 한가지 문제점만 빼면 참신하게 잘 짰습니다. 제가 처음 짤 때와 같은 오류가 발생했습니다. "IndexError"
이유는 첫번째 조건에서 or가 아닌 and 여야 합니다. 코딩을 할 때 여러개의 함수를 만든다면 항상 만든 함수가 제대로 작동하는지부터 확인해보고 넘어가세요. 나중에 한꺼번에 돌릴 때 오류가 발생한다면 어디서 발생한 오류인지 확인하기가 힘듭니다.
2019년 5월 30일
저 같은 경우 merge함수를 만들고 바로 merge 함수만을 테스트했기때문에 문제점을 쉽게 해결할 수 있었습니다.
2019년 5월 30일
merge_sort함수는 재귀함수에 대한 이해가 부족한걸로 보입니다. 재귀함수의 핵심은 코드의 단순화입니다. for문은 코드가 복잡해지는 대신 과정이 명확히 보이지만, 재귀함수는 코드가 단순한 대신 과정이 숨겨져 있어 직관적인 이해가 힘든 단점이 있습니다.
2019년 5월 30일
merge_sort의 재귀조건은 정렬되었지만 분할된 리스트를 합치는 것입니다.
정렬되었다는 것은 merge_sort 함수를 말하는 거고, 함친다는 것은 merge 함수를 말하는 것입니다.
2019년 5월 30일
따라서 재귀조건은 return merge(merge_sort(반으로 나눠진 한쪽), merge_sort(나머지 한쪽)) 입니다.
A
2개의 답변이 있어요
2018년 7월 2일

댓글 2

2018년 7월 2일
우선 `left` ,`right`이 `list1`, `list2`로 바뀌어야 합니다.
2018년 7월 2일
그리고 두 번째 반복문에서 `if len(list1) > 0:`이 아니라 (list1의 원소를 삭제한게 아니기 때문에) `if i < len(list1):`이 기준이 되어야 하며, 마찬가지로 `else:`도 `if j < len(list2):`로 바뀌어야 합니다.

(주) 코드잇

대표강영훈

개인정보보호책임자강영훈

이메일support@codeit.kr

사업자 번호313-86-00797

통신판매업제 2019-서울중구-1034 호

주소서울특별시 중구 청계천로 100 시그니쳐타워 동관 10층 코드잇