zipbob   8년 전

크루스칼 알고리즘을 이용해서 구현하려고 하다가

막히는 부분이 있어서 인터넷을 찾아보니까

unite-find 자료구조가 있더라구요....

quicksort한 후에 unite-find를 통해 사이클이 안생기도록 하고 

tree를 만드는 방식으로 구현했는데

시간초과가 뜨더라구요 어디서 시간초과가 발생한건가요??

zipbob   8년 전

시간초과는 퀵정렬할때 값이 같을경우를 처리안해줘서 뜬거였네요..

퀵정렬 수정하니까 틀렸다고 나오네요..ㅠㅠ다시 찾아봐야겠습니다.

mizuharaeki   4년 전

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 이잖아요.

이건 잘못된 정렬이지 않을까요?

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