QSORT与32bits的未签名INT进行比较,失败,我不观察错误


#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);

最新更新