123님 코드로 테스트를 해 보니까 진짜 시간 초과가 뜨네요.
MergeSort를 쓰신 거 같으신데요. Merge하는 알고리즘 자체는 맞습니다.
병합 정렬에 대해서 아실지도 모르겠지만요.
left에서 right까지 병합 정렬을 하는 경우, 다음과 같은 과정을 수행합니다.
(1) 먼저 left ~ mid까지를 병합정렬 합니다.
(2) 그 다음에 mid+1 ~ right까지를 병합정렬 합니다.
(3) 그리고 merge 합니다.
29번째 줄에서 30번째 줄을 봅시다.
(1) sort( age, name, 0, mid ); // 0 ~ mid까지 정렬합니다.
(2) sort( age, name, mid + 1, right ); // mid+1 ~ right까지 정렬합니다.
어디서 잘못되었는지 보이시지요? 분명, left부터 right까지 정렬을 하면 되는데
(1)번 과정에서 0번째 원소부터 sorting하려고 하니.
(1)에서 sort 함수를 부르면 left = 0일 테고요. right = mid겠지요?
당연히 시간 초과가 나겠지요.
따라서 29번째 줄을
(1) sort( age, name, left, mid );
로 고쳐주시면 되겠습니다.
cjstjdgur123 7년 전
다음 코드로 해서 안되다가
qsort를 사용해보니 시간초과 없이 정답처리가 됐는데요.
질문을 수정하겠습니다.
아래 코드는 시간초과되고 qsort는 제 시간에 된 이유가 궁금합니다.