按字母顺序打印列表中的某些单词

时间:2013-09-28 00:02:41

标签: c arrays sorting linked-list

我正在查看单词列表,如果某个单词符合某些条件,则会将其打印到屏幕上。棘手的一点是要将字体打印到屏幕上的顺序是按字母顺序排列的。这样做的最佳方法是什么?我猜想首先排序列表效率很低所以我选择了一个链表,但遗憾的是c doesn't have one :(

1 个答案:

答案 0 :(得分:1)

最好的方法是在打印出来之前对单词进行排序。 C提供了一个名为qsort()的排序函数。它适用于数组,需要传递比较函数。以下是使用qsort()int数组进行排序的示例。

static int cmp_int (const void *a, const void *b);

//...
    int arr[] = { 2, 4, 6, 1, 3, 5 };
    qsort(arr, sizeof(arr)/sizeof(*arr), sizeof(*arr), cmp_int);

正确实现cmp_int()的技巧是要意识到比较函数接收的类型与&arr[0]的类型相同。由于arrint的数组,这意味着cmp_int()将获得int *种类型。如果第一个参数小于第二个参数,则该函数应返回负值,如果第一个参数大于第二个参数,则返回正值,否则返回0。

static int cmp_int (const void *a, const void *b) {
    const int *aa = a;
    const int *bb = b;
    return (*aa > *bb) - (*aa < *bb);
}