sadxp   5년 전

퀵정렬이 피벗값을 정하고 한번 정렬하고 나면 피벗점 기준으로 왼쪽에는 피벗보다 작은값, 오른쪽에는 큰값이 정렬되는데,

aa[4] = { 5,6,8,2}; 를 넣었을때, 6을 피벗을 잡고 소스를 돌리면, 한번 정렬하고나면 5 2 6 8 이 아니라 5 2 8 6이 나오더라구여..

5 2 8 6이면 피벗값인 6보다 큰 8 이 왼쪽에있어서 예상하고 다르네여.

소스를 다 돌리면 결국 정렬은 되는데, 중간 과정이 왜 생각과 다른지 궁금해서 질문합니다.

tor012   5년 전

코드에서 쓴 퀵정렬의 경우, 피봇보다 작은 값은 피봇의 왼편에, 큰값은 피봇의 오른편으로 두게 원하시는거 같은데

이론적으로는 5682가 들어오면 52 6 8 이렇게 되고, 그다음 52끼리 돌고, 8혼자 돌고 이런건데

구현상에서 퀵소트 루프 한번 돌았을때 5268이 아니라 5286인거는 6을 그냥 작은것과 큰것 사이로 옮겨주는 과정이 없어서 그렇습니다.

8571e3de-c5ee-45e1-ada5-dd0feb5b55de

위키피디아에서 가져온 이미지인데요 처음 피봇(맨오쪽)을 기준으로 작은것 큰것을 구분하고난 이후에야 그 사이로 피봇이 옮겨지는데

위의 코드는 그 가운데로 옮겨지는 과정이 없어서 그렇습니다. 어짜피 피봇보다 작은거끼리 퀵소트 돌려버리고,  피봇과 그거보다 큰값끼리 돌려버리면

그 퀵소트에서는 알아서 피봇이 제일 작은 위치 일거니까요.

tor012   5년 전

두번째 줄에 "  8혼자 돌고 이런건데" 이부분이 아니고 피봇과 8(피봇보다 큰값들)이 돌게 되는거에용.. 수정이 안대넹

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