메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 알고리즘

뇌를 자극하는 알고리즘 질의응답 게시판입니다.

p207 퀵소트에서 질문이 있습니다.

2010-07-23

|

by toughguy

2732

안녕하세요, p207의 퀵소트 프로그램의
Partition()함수에 관한 질문인데요, 제가 궁금증이 생긴 부분은,
===========================================================
int Partition(int DataSet[], int Left, int Right)
{
        int First=Left;
        int Pivot=DataSet[First];
        Left++;

        while(Left<=Right)
        {
                while(DataSet[Left]<=Pivot)  <<*****이 부분입니다.*****
                        ++Left;
                while(DataSet[Right]>Pivot)
                        --Right;

                if(Left                         Swap(&DataSet[Left], &DataSet[Right]);
                else
                        break;
        }
        Swap(&DataSet[First], &DataSet[Right]);
        return Right;
}
=================================================
화살표로 표시한 while문에서, 만약에 크기가 3인 배열에 4,3,2 이 3가지 값이 들어갔을경우(역순으로 들어갔을 경우) while문을 돌면서,
존재하지 않는 영역인 DataSet[3]값 (쓰레기값) 을 비교하는 결과가 초래되는데요, 이 상황은
어차피 Left값이 Right값보다 커지기 때문에 출력결과는 문제가 없지만, 논리적으로는 문제가 있는부분 아닌가요?
또한 그럴리 없겠지만 만약 DataSet[3]부터 값(쓰레기값)이 계속 1로 정해져있다면, 쓸데없이 Left값이 증가하게 되어서 프로그램의 효율을 떨어지게 만드는 결과가 발생할수도 있지 않을까해서 질문합니다.
이 부분을 조건 검사시 Left가 배열의 용량을 넘지 않도록 while(DataSet[Left]<=Pivot && Left 와 같은 형태로 바꾸는 것은 어떨까요? 사소한 부분이지만 궁금해서 글 올립니다.
댓글 입력