Я пытаюсь написать программу, которая сравнивает время, необходимое для сортировки массива struct Record с использованием как qsort (), так и алгоритма пузырьковой сортировки с использованием функций компаратора.Пользователь вводит, какой метод сортировки он хочет использовать и какой элемент структуры он хотел бы отсортировать.
struct Record {
int seqnum;
float threat;
unsigned int addrs[2];
unsigned short int ports[2];
char dns_name[NUMLTRS];
};
Мой qsort () работает безупречно, поэтому я считаю, что моя функция компаратора верна.Однако при использовании пузырьковой сортировки она сортируется неправильно.Вот пример одной из моих функций компаратора (seqnum).
int SeqNumCompare(const void *a, const void *b)
{
struct Record *sa, *sb;
sa = (struct Record *) a;
sb = (struct Record *) b;
if (sa->seqnum < sb->seqnum) return -1;
else if (sa->seqnum > sb->seqnum) return 1;
else return 0;
}
А вот моя функция пузырьковой сортировки.
void bubblesort(struct Record *ptr, int records,
int (*fcomp)(const void *, const void *))
{
int i, j;
struct Record temp;
for (i = 1; i < records; i++) {
for (j = 0; j < records - i; j++) {
if (fcomp(ptr + j, ptr + j + 1)) {
temp = ptr[j];
ptr[j] = ptr[j + 1];
ptr[j + 1] = temp;
}
}
}
}
Мне кажется, что это определенно должно работать, но массивнеправильно сортируется после вызова функции.Я отлаживал в течение нескольких часов и не могу найти ничего, что имеет смысл изменить.Можете ли вы увидеть какие-либо явные ошибки в моем коде сортировки пузырьков?
Функция пузырьковой сортировки вызывается в основной функции следующим образом:
if (sort_type == 2) // bubble sort
{
start = clock();
if (sort_field == 1)
bubblesort(rec_ptr, num_records, SeqNumCompare);
else if (sort_field == 2)
bubblesort(rec_ptr, num_records, ThreatCompare);
else if (sort_field == 3)
bubblesort(rec_ptr, num_records, AddrCompare);
else if (sort_field == 4)
bubblesort(rec_ptr, num_records, DNSNameCompare);
end = clock();
}