시간초과는 퀵정렬할때 값이 같을경우를 처리안해줘서 뜬거였네요..
퀵정렬 수정하니까 틀렸다고 나오네요..ㅠㅠ다시 찾아봐야겠습니다.
1197번 - 최소 스패닝 트리
left<right일때 while문을 돌리게되면 left==right가 되는 순간에 피벗과 스왑이 일어나는데, 이경우는 원래 퀵정렬의 정의와 맞지 않습니다.
퀵정렬은 left보다 right값이 작아야만, 그 부분이 피벗과 스왑이 일어납니다.
5 3 2 1 9 8 6 7
님 코드로 위 배열을 정렬하면
left가 9에서 멈추고, right역시 left<right조건때문에 left와 동일한 9에서 멈춥니다.
그럼 그게 피벗인 5와바꿔주게 되면 9 3 2 1 5 8 6 7 이잖아요.
이건 잘못된 정렬이지 않을까요?
댓글을 작성하려면 로그인해야 합니다.
zipbob 8년 전
크루스칼 알고리즘을 이용해서 구현하려고 하다가
막히는 부분이 있어서 인터넷을 찾아보니까
unite-find 자료구조가 있더라구요....
quicksort한 후에 unite-find를 통해 사이클이 안생기도록 하고
tree를 만드는 방식으로 구현했는데
시간초과가 뜨더라구요 어디서 시간초과가 발생한건가요??