#define u32 uint32_t
struct edge {
u32 v1;
u32 v2;
};
struct edge *array = malloc((sizeof(struct edge))*Narray);
int struct_cmp_by_v1(const void *i, const void *j) {
struct edge *a = (struct edge *)i;
struct edge *b = (struct edge *)j;
u32 x = a->v1;
u32 y = b->v1;
if(x < y)
return -1;
else if(x == y)
return 0;
else
return 1;
}
qsort(array, (size_t)(sizeof(array)/sizeof(struct edge)), sizeof(struct edge), struct_cmp_by_v1);
我想安排一个结构和Qsort的数组,只能比较结构的一个字段,以便订购结构保持不变性,即使V1被V1订购后,V1即使V1具有相应的合作伙伴V2,案例是用flag -o3井编译的,尽管它订购了,但输出以某种方式是无序的,因为许多U32订购了许多重复的u32,而且有些人很少有订单。
QSORT订单,但在执行结束时使它变得混乱,我要求一个功能检查订单和退出:
amount of elements in the array:25056012
begins to order
finished ordering
1818004993
1343749791
1343749791 < 1818004993
index: 1 < 0
我不明白我可以忽略什么,如果有人能给我帮助,我会非常感谢
sizeof(array)
给出指针的大小
sort(array,
(size_t)(sizeof(array)/sizeof(struct edge)),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // This should be just 'Narray'
sizeof(struct edge),
struct_cmp_by_v1);
我所做的一些更改是:
return x > y ? 1 : -1; //in struct_cmp_by_v1
qsort(array, Narray, sizeof(struct edge), struct_cmp_by_v1);