저는 QuickSort 알고리즘을 알아 내려고했습니다. 그러나 Partition and QuickSort 함수에 배열을 전달할 수없는 것 같습니다. 배열의 첫 번째 요소 만 처리합니다.왜 함수는 배열의 첫 번째 요소 만 사용합니까? (C++)
어떻게 해결할 수 있습니까?
void QuickSort(int a[], int first, int last)
{
int pivot;
if (first < last)
{
pivot = Partition(a, first, last);
QuickSort(a, first, pivot - 1); // <-- HERE
QuickSort(a, pivot + 1, last);
}
}
을 그리고 모든 것은 OK입니다 :
template < class T > int getArrayLen(T & array) {
return (sizeof(array)/sizeof(array[0]));
}
int Partition(int a[], int first, int last) {
int pivot = a[last];
int i = first - 1;
for (int j = first; j < last; j++) {
if (a[j] <= pivot) {
i++;
swap(a[i], a[j]);
}
}
swap(a[i + 1], a[last]);
return i + 1;
}
void QuickSort(int a[], int first, int last) {
int pivot;
if (first < last) {
pivot = Partition(a, first, last);
QuickSort(a, first, pivot);
QuickSort(a, pivot + 1, last);
}
}
int main() {
int a[] = {
4, 32, 3, 13, 48, 45, 12, 54, 7, 42, 3, 12, 5, 24, 20
};
int length = getArrayLen(a);
QuickSort(a, 0, length - 1);
}
@icepack 그 이유는 무엇입니까? 이것이 바로 디버거가 가장 친한 친구 인 상황입니다. –
@icepack : bash.d가 맞습니다. OP는 우리에게 코드를 디버깅 할 것을 요구하고 있습니다. 그는 스스로 그렇게해야합니다. –
@icepack : 부패 코멘트를 다시 작성하십시오. 틀렸어. 여기서 논증은 참조로 전달됩니다. 구현은 일반적이지 않고 안전하지 못하지만이 용도로 작동합니다. –