我面临挑战。我有结构链表上的数据。是否将数据移动到结构数组上然后使用qsort()进行排序或使用合并排序? 这是结构:
struct properties{
char *path;
char *name;
char *extension;
long int size;
long unsigned created;
long unsigned modified;
long unsigned access;
int permissions;
};
答案 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的一部分,所以我不必编写和维护这么多代码。它总是一个快速的选择。