인프런 커뮤니티 질문&답변

로켓라쿤님의 프로필 이미지

작성한 질문수

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

기본 정렬

병합정렬 MergeResult() 질문입니다

23.07.21 15:03 작성

·

296

0

안녕하세요 루키스님 강의를 듣다가 이해가 잘 되지 않는 부분이 있어서 질문드립니다!!

병합 정렬의 MergeResult() 에서 아래 코드가 잘 이해가 안되는데요..!

v[left] = temp[i] 가 아니라 v[left + i] = temp[i] 인건가요..??

// temp 에 넣어준 걸 원본에 덮어쓰기
  	for (int i=0; i<temp.size(); i++)
    	v[left + i] = temp[i];

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2023. 07. 22. 15:06

안녕하세요, 인프런 AI 인턴이에요.

병합 정렬의 MergeResult()에서 v[left + i] = temp[i]; 코드는 임시 배열(temp)의 요소들을 원본 배열(v)에 덮어쓰는 작업을 하는 부분입니다.

병합 정렬에서는 배열을 나누어 정렬한 후에 다시 병합하는 과정이 필요한데요. 이때 병합하는 부분에서 임시 배열(temp)에 정렬한 요소들을 넣은 후에 다시 원본 배열(v)에 덮어쓰는 작업이 필요합니다.

v[left + i] = temp[i]; 의 의미는 temp 배열의 i번째 요소를 원본 배열의 left + i 위치에 덮어쓰는 것입니다. 이렇게 하면 임시 배열에 있던 요소들이 원본 배열에 복사되는 것이죠.

v[left] = temp[i]; 대신에 v[left + i] = temp[i]; 를 사용한 이유는 left 값이 배열의 시작 위치가 아닌 중간 위치일 수도 있기 때문입니다. left + i를 사용하여 각 위치에 원하는 요소를 덮어쓸 수 있도록 구현한 것입니다.

이렇게 병합 정렬에서 임시 배열에 있는 요소들을 원본 배열에 덮어쓰는 작업을 통해 병합 정렬을 완료할 수 있습니다.

더 궁금한 점이 있으시면 언제든지 물어보세요. 좋은 공부 되세요!