2014-02-06 2 views
0

현재 quicksort를 배울 때 두 가지 질문이 있습니다.quicksort에 대한 두 가지 질문

void Quicksort(int a[], int low, int high){ 
    if(low<high){ 
     int pivotpos=Patrition(a,low,high); 
     Quicksort(a,low,pivotpos-1); 
     Quicksort(a,pivotpos+1,high); 
    } 
} 
int Patrition(int a[], int low, int high){ 
    int pivot=a[low]; //first elemnent as pivot 
    while(low<high){ 
     while(low<high&&a[high]>=pivot) --high; //1 
     a[low]=a[high]; 
     while(low<high&&a[low]<=pivot) ++low; //2 
     a[high]=a[low]; 
    } 
    a[low]=pivot; 
    return low;  
} 

내 질문에 위의 코드에서 (1 표시 2) :

표준 코드 (내 책에서 복사) 여기에있다. 왜 내가 1 : while(a[high]>=pivot) --high (2 에서처럼)에 이것을 입력 할 때 프로그램을 수행 할 수 없다 (코어 덤프). 그것은 루프를 두 번째 및 세 번째에 condition(low<high) 추가해야 할 것 또는 코어 덤프했다?

b. 또 다른 질문은 두 번째 및 세 번째 루프에 operator=이 있어야하는 이유입니다. 내가 입력했을 때 왜 작동하지 않습니다 혼란 스럽네요 while(low<high&& a[high]>pivot (비슷하게 2). 그렇게한다면,이 프로그램은 루핑을 계속하고 절대로 끝나지 않을 것입니다.

감사합니다. 모든 제안은 매우 감사하겠습니다.

+0

3에 도달하지 결코 곳'고

+0

솔직히 최고 이런 종류의 일을 처리하는 방법은 펜과 종이로 그것을 통과하는 것입니다. 4 개 또는 5 개의 요소가있는 간단한 배열을 선택하여 작성한 다음 루프를 통과 할 때마다 발생하는 상황과 변경 방법을 작성하십시오. – Vicky

+0

왜 추가해야합니까? 다른 두 개의 루프가 포함 된 첫 번째 (아직 (낮은 <높음) 동안)에 이미 있지 않습니까? 왜 3 가지 조건이 같아야합니까? juse는 코어 덤프가 발생하는 이유를 이해할 수 없습니다 .... – user3132755

답변

1

각 while 루프에서 낮은 <을 먼저 써야하는 이유는 처음 while (큰 것) 조건을 확인하고 루핑을 시작한 다음 // 1 동안 상태를 확인하고 유지하면서 반복하지만 그 시간 동안 첫 번째 (큰 것) 조건은 확인되지 않습니다.

예 : 그것은 결코 실제로 변경되어야하는 값에 도달하지 않기 때문에 A = 3

이 질문 B에 관해서는,이 때이 코드

a = 6; 

while (a > 5) { 
    while (a > 3) { 
     --a; 
    } 
} 

는 제 2 루프 만 정지 따라서 실제로 그것을 정렬하지 마십시오.

예 : 루프를 a = 3에서 정지 시키려면 다음 루프가 한 단계 더 빨라집니다.

a = 5; 
while (a > 4) { 
    --a; 
} 

값은 당신이, 당신이 상황에서 끝낼 수 있었다하지 않은 경우 글쎄, 그것은 = 4에서 중지,

+0

대단히 감사합니다. 알 겠어! 잠시 가면 큰 동안의 상태는 체크되지 않을 것입니다. – user3132755