코드에서 쓴 퀵정렬의 경우, 피봇보다 작은 값은 피봇의 왼편에, 큰값은 피봇의 오른편으로 두게 원하시는거 같은데
이론적으로는 5682가 들어오면 52 6 8 이렇게 되고, 그다음 52끼리 돌고, 8혼자 돌고 이런건데
구현상에서 퀵소트 루프 한번 돌았을때 5268이 아니라 5286인거는 6을 그냥 작은것과 큰것 사이로 옮겨주는 과정이 없어서 그렇습니다.
위키피디아에서 가져온 이미지인데요 처음 피봇(맨오쪽)을 기준으로 작은것 큰것을 구분하고난 이후에야 그 사이로 피봇이 옮겨지는데
위의 코드는 그 가운데로 옮겨지는 과정이 없어서 그렇습니다. 어짜피 피봇보다 작은거끼리 퀵소트 돌려버리고, 피봇과 그거보다 큰값끼리 돌려버리면
그 퀵소트에서는 알아서 피봇이 제일 작은 위치 일거니까요.
sadxp 5년 전
퀵정렬이 피벗값을 정하고 한번 정렬하고 나면 피벗점 기준으로 왼쪽에는 피벗보다 작은값, 오른쪽에는 큰값이 정렬되는데,
aa[4] = { 5,6,8,2}; 를 넣었을때, 6을 피벗을 잡고 소스를 돌리면, 한번 정렬하고나면 5 2 6 8 이 아니라 5 2 8 6이 나오더라구여..
5 2 8 6이면 피벗값인 6보다 큰 8 이 왼쪽에있어서 예상하고 다르네여.
소스를 다 돌리면 결국 정렬은 되는데, 중간 과정이 왜 생각과 다른지 궁금해서 질문합니다.