kwak2418   2년 전

안녕하세요 여러분 병합정렬을 드디어 어느 정도 이해하고 혼자 짜봤는데요

정렬은 잘되는데 이론 상 stableSort가 되야 하는데 입력을 여러번 해보니 안되는 구간이 있더라구요..

하루종일 뒤져봐도 어디 쪽에서 stable 속성이 안들어 갔는지 모르겠어요 ㅜㅜ 

지적 좀 해주세요

pichulia   2년 전

21번째 줄을 보시면 pair<int, string> 단위로 비교연산을 하고 있는데 이것이 의도랑 맞는 동작인지 확인해보세요.

"stable"인지 아닌지 확인한다는 의미는 비교연산자 상으로 !(a<b || b<a ) 를 만족하는 서로 다른 두 a,b 가 있다는 의미인데

pair<int, string> 은 서로 다른 두 값은 항상 a<b || b<a 를 만족하므로

stable 성질을 전혀 써먹을 구석이 없습니다.

다음과 같은 입력에 대해서

0 b

0 a

가 나와야 하는지

0 a

0 b

가 나와야 하는지부터 확인해보시길 바랍니다. 

그리고 여담인데, temp 배열의 크기를 너무 크게 잡고 있습니다. 현재와 같은 구현방식으로는 temp 배열 메모리 할당으로 인해 시간복잡도가 O(n^2) 이 나옵니다. 이 부분은 수정이 필요합니다.

kwak2418   2년 전

정말 자세하고 깔끔한 설명 감사드립니다.

여담으로 해주신 temp 메모리 할당 관련하여 추가 질문 드립니다. 

end-start로 해주면 적절할 까요?

pichulia   2년 전

네. 정확히는 temp = vector<~~>(end-start+1); 만큼의 메모리가 필요할겁니다.

kwak2418   2년 전

end-start ~ end-start+2 까지 해봤는데요ㅜㅜ 계속해서 segement falut가 검출 됩니다..

kwak2418   2년 전

18 번째 k의 시작과 51번 째 마지막 처리의 index를 잘 맞춰주니 동작 너무 잘됩니다 정말 감사합니다 ^^

댓글을 작성하려면 로그인해야 합니다.