我正在尝试编写一个程序,该程序比较使用qsort()和使用比较器功能的bubbleort算法对struct Record数组进行排序的时间。用户输入他们想要使用的排序方法以及想要排序的结构的哪个成员。
struct Record {
int seqnum;
float threat;
unsigned int addrs[2];
unsigned short int ports[2];
char dns_name[NUMLTRS];
};
我的qsort()可以完美地工作,所以我相信我的比较器函数是正确的。但是,使用Bubblesort时,排序不正确。这是我的比较器功能之一(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;
}
这是我的Bubblesort函数。
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;
}
}
}
}
我觉得这绝对可以,但是在调用函数后,数组的排序不正确。我已经调试了几个小时,似乎找不到任何有意义的更改。您可以在我的Bubblesort代码中看到任何明显的错误吗?
冒泡函数在主函数中这样调用:
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();
}