我試圖找出一個QuickSort算法。 但是,看起來我無法將數組傳遞給Partition和QuickSort函數。它們只處理數組的第一個元素。爲什麼函數只使用數組的第一個元素? (C++)
我該如何解決?
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爲什麼會這樣呢?這正是調試器是你最好的朋友的情況。 – 2013-03-12 07:57:37
@icepack:bash.d是對的。 OP要求我們調試他的代碼。他應該自己做。 – 2013-03-12 07:59:51
@icepack:重新評估你的衰變,你錯了。這裏的論點是通過引用傳遞的。實施非常規且不安全,但適用於此用途。 – 2013-03-12 08:00:26