Мне нужна эффективная сортировка, которая не имеет обратного вызова, но настраивается так же, как и использование qsort (). Я хочу, чтобы он работал как итератор, где он непрерывно вызывает API-интерфейс сортировки в цикле до тех пор, пока это не будет сделано, выполняя сравнение в цикле, а не в функции обратного вызова. Таким образом, пользовательское сравнение является локальным для вызывающей функции (и, следовательно, имеет доступ к локальным переменным, потенциально более эффективно и т. Д.). Я реализовал это для неэффективной сортировки выбора, но нужно, чтобы она была эффективной, поэтому я предпочитаю быструю сортировку.
Кто-нибудь делал что-нибудь подобное? Я пытался сделать это для быстрой сортировки, но попытка вывернуть алгоритм наизнанку слишком сильно повредила мой мозг.
Ниже показано, как это может выглядеть при использовании.
// the array of data we are sorting
MyData array[5000], *firstP, *secondP;
// (assume data is filled in)
Sorter sorter;
// initialize sorter
int result = sortInit (&sorter, array, 5000,
(void **)&firstP, (void **)&secondP, sizeof(MyData));
// loop until complete
while (sortIteration (&sorter, result) == 0) {
// here's where we do the custom comparison...here we
// just sort by member "value" but we could do anything
result = firstP->value - secondP->value;
}