john6014   7년 전

코드가 좀 더럽긴한데요.. 메인을 제외한 소스는 퀵 정렬 공부하고 스스로 짜보느라 추가된 정렬 소스들이구요

제가 생각하는 예제들로는 정상적인 값이 나오는데 어디서 틀리는건지 모르겟습니다...

yongjun18   7년 전

main함수에서 NumberSort 를 호출하기 전, 재정렬 범위를 정할 때 실수가 하나 있었던 것 같네요.

Score.time 와 Score.complete  둘 중 하나만 달라도 정렬 범위에서 벗어나야 합니다. 그 하나로 인해 둘 사이엔 정렬이 끝났기 때문이죠.


변경 전

else if (Score[i].time != Score[i + 1].time && Score[i].complete != Score[i + 1].complete && count != 0) {
            NumberSort(Score, index, index + count, Problem);
            count = 0;
}


변경 후

else if ((Score[i].time != Score[i + 1].time || Score[i].complete != Score[i + 1].complete) && count != 0) {
        NumberSort(Score, index, index + count, Problem);
        count = 0;
  }


john6014   7년 전

답변은 감사합니다만.

음.... 제 논리가 맞을 껍니다만... 위 조건 이 해결한 문제 개수와 총 걸린 시간이 동일하면 팀번호 순서대로 정렬하는 것이므로 || 을 주어지면 엉뚱하게 돌아갑니다..

문제는 그냥 제가 정렬 인덱스를 잘못 지정햇네요...

어찌됫든 감사합니다 ㅎㅎ

yongjun18   7년 전

음, 제 말은 해결한 문제 개수와 총 시간이 동일하면 팀번호 순서대로 정렬하는 것이므로

해결 개수와  총 시간이 동일하지 않으면 ( = 해결 개수와 총 시간 중 하나라도 다르면 )  count 값 증가를 그만 두고 팀번호순 정렬을 해야한다는 것이었습니다.


그러고보니 바로 위에서 해결 개수와 총 시간이 동일한 경우의 수를 모두 체크 했으니

else if (count != 0) {
        NumberSort(Score, index, index + count, Problem);
        count = 0;
  }

위 코드로도 맞았습니다! 뜨네요.


아무튼 푸셨다니 다행입니다.

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