哪个更快,排序结构数组或排序结构列表C?

时间:2015-06-16 10:41:53

标签: c arrays list sorting

我面临挑战。我有结构链表上的数据。是否将数据移动到结构数组上然后使用qsort()进行排序或使用合并排序? 这是结构:

struct properties{
    char *path;
    char *name;
    char *extension;
    long int size;
    long unsigned created;
    long unsigned modified;
    long unsigned access;
    int permissions;
};

1 个答案:

答案 0 :(得分:3)

我会创建一个指向结构的指针数组,并使用void dispatch_write ( dispatch_fd_t fd, dispatch_data_t data, dispatch_queue_t queue, void (^handler)(dispatch_data_t data, int error) ); 对指针数组进行排序。使用复制整个结构的指针instad将使用更少的内存。

创建一个这样的比较器:

qsort

这样称呼:

int propertyComparator(const void *s1, const void* s2) {
    struct property *p1 = (struct property *)s1, *p2 = (struct property *)s2;

    /* compare p1 and p2, below is just an example */
    int result = strcmp(p1->name, p2->name);
    return result;
}

修改

如果您想要一个已排序的链表,那么mergesort的速度就快了。似乎这取决于链表的碎片程度。 见https://stackoverflow.com/a/1525419/646887

我更喜欢 struct property *array; /* add code to allocate and create array */ qsort(array, num_elements, sizeof array, propertyComparator); 的原因是它是C lib的一部分,所以我不必编写和维护这么多代码。它总是一个快速的选择。