현재 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). 그렇게한다면,이 프로그램은 루핑을 계속하고 절대로 끝나지 않을 것입니다.
감사합니다. 모든 제안은 매우 감사하겠습니다.
3에 도달하지 결코 곳'고
솔직히 최고 이런 종류의 일을 처리하는 방법은 펜과 종이로 그것을 통과하는 것입니다. 4 개 또는 5 개의 요소가있는 간단한 배열을 선택하여 작성한 다음 루프를 통과 할 때마다 발생하는 상황과 변경 방법을 작성하십시오. – Vicky
왜 추가해야합니까? 다른 두 개의 루프가 포함 된 첫 번째 (아직 (낮은 <높음) 동안)에 이미 있지 않습니까? 왜 3 가지 조건이 같아야합니까? juse는 코어 덤프가 발생하는 이유를 이해할 수 없습니다 .... – user3132755