Итак, я пытаюсь написать функцию quicksort на основе стека, которая вызывает функцию перегородки. Заголовок для раздела() заключается в следующем:Аргументы для функции разделения для Quicksort
int partition(void **A, int n, void *pivot, int (cmp)(void *, void *));
, где А представляет собой массив, п является размером массива и поворот представляет собой значение шарнира (не индекс).
Мой текущий вызова раздела является:
partition(&A[low_int], high_int + 1, A[low_int+(high_int-low_int)/2], cmp)
Выше, мои значения для низких и высоких являются классическим «л» и «з» используется в итерационной сортировке, где л начинается как самый низкий показатель (и h самый высокий). Эти значения затем изменяются по мере продолжения функции.
я выложу свою функцию секционирования ниже:
int
partition(void **A, int n, void *pivot, int (cmp)(void *, void *)) {
int k;
int i = 0;
for (int j = 0; j <= n-2; j++) {
if (cmp(A[j], pivot) <= 0) {
i++;
swap(A, i, j);
}
}
swap(A, i+1, n-1);
k = i + 2;
return k; //k is the first value after the pivot in partitioned A
}
Моя проблема заключается в принятии решения о входах для моего вызова раздела(). Для первого аргумента я выбрал & [low_int], так как я не использую «левый» как один из моих входов и поэтому пытаюсь создать указатель, чтобы по существу запустить мой массив позже. Третий аргумент, если для pivot, где я пытался выбрать элемент в этом диапазоне, но оба этого и аргумент 1 заставляют мой код либо возвращать несортированный массив, либо работать бесконечно.
Могу ли я, пожалуйста, помочь мне с тем, что я сделал неправильно, и как его исправить?
Я попытался включить весь соответствующий код, но, пожалуйста, дайте мне знать, если я пропустил что-либо важное или если что-либо, что я написал, неясно или вам нужно больше информации. Спасибо