모두의 코드 커뮤니티

알고리즘 2-1 합병정렬 c++ 코드 관련 질문있습니다

// 위에서 만든 merge 함수를 사용한다.
template <typename T>
vector<T> merge_sort(const vector<T>& data) {
  if (data.size() <= 1) {
    return data;
  }
  size_t mid = data.size() / 2;
  const auto left = merge_sort(vector<T>(data.begin(), data.begin() + mid));
  const auto right = merge_sort(vector<T>(data.begin() + mid, data.end()));

  return merge(left, right);
}
int main() {
  auto merged = merge_sort(vector<int>{8, 5, 1, 4, 2, 3, 7, 6});

  for (int num : merged) {
    cout << num << " ";
  }
}

여기 재범님이 올려주신 merge_sort 함수에서

  const auto left = merge_sort(vector<T>(data.begin(), data.begin() + mid));
  const auto right = merge_sort(vector<T>(data.begin() + mid, data.end()));

  return merge(left, right);

이 부분이 어떤 순서로 동작하는지 이해가 안되서 질문드립니다…

글로 써서 하나하나 짚어가다보니까 어느정도 순서가 정리가 됩니다! 제가 정리하고 나니까 재범님께서 설명해준 그림이 이해가 되네요. 성급하게 질문했네요 죄송합니다…!
(L = left, R = right, m_s = merge_sort, m = merge)
merge_sort

merge

네 맞습니다. 왼쪽 정렬하고 오른쪽 정렬하고 그 다음에 합치는 식입니다 :slight_smile: