qSort来排序结构

时间:2016-05-10 00:07:44

标签: c sorting structure qsort

我正在尝试对以下结构进行排序:

typedef struct thing {
    char *text;
    int count;
} *Item;

我正在创建一个额外的向量来对结构进行排序,如下所示:

Item items[nr_of_items];

... here is a loop to place the items inside the vector items ...

qsort(items, nr_of_items, sizeof(Item), cmpItem);

这是比较功能:

int cmpItem(const void *a, const void *b) {

  const Item item_a = (const Item)a;
  const Item item_b = (const Item)b;

  /* Return 1 or -1 if members are not equal */
  if (item_a->count > item_b->count) return 1;
  if (item_a->count < item_b->count) return -1;

  /* Return 1 or -1 if members are not equal */
  if ( strcmp ( item_a->text, item_b->text ) > 0 ) return 1;
  if ( strcmp ( item_a->text, item_b->text ) < 0 ) return -1;

  /* Return 0 if both members are equal in both structures */
  return 0;

}

正在创建矢量,但它没有被排序。难道我做错了什么?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

compar的{​​{1}}回调函数接收两个指向被比较对象的参数,即指向qsort数组中两个元素的指针。这意味着,itemsa都指向b,而不是Item本身。你需要改变这个:

Item