使用Bubblesort和比较器函数对结构数组进行排序

时间:2018-11-26 00:39:56

标签: c sorting bubble-sort

我正在尝试编写一个程序,该程序比较使用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();
}

0 个答案:

没有答案