用c语言对链表进行两次排序

时间:2015-01-22 11:26:37

标签: c linked-list

我在排序链表时遇到问题。我想对它进行两次排序,如下所示:

输入

char cl; int time; int lng;
A 2 2

B 2 1

C 0 2

D 0 1 

我希望输出看起来像这样:

C 0 1

D 0 2

B 2 1 

A 2 2 

正如您所看到的,我想要的输出按第二列和第三列排序。我只能使用此代码按第二列排序

void sort (const node *n)
{
    node *list,*pass;
list = n;
for (; list->next != NULL; list = list->next)
{  for (pass=list->next; pass!=NULL; pass=pass->next)
    if (list->time < pass->time)
    {   swap(list, pass);

    }
 }
}

1 个答案:

答案 0 :(得分:3)

John C为您提供了一个很好的提示(从最重要的密钥到最重要的密钥检查):

int comp(const void *pa, const void *pb)
{
    const node *a = (const node *)pa;
    const node *b = (const node *)pb;

    return (a->lng < b->lng) ? 1 :
           (a->time < b->time) ? 1 :
           (a->cl < b->cl) ? 1 : 0;
}

void sort(const node *n, int (*comp)(const void *, const void *))
{
    node *list, *pass;

    list = n;
    for (; list->next != NULL; list = list->next) {
        for (pass=list->next; pass!=NULL; pass=pass->next) {
            if (comp(list, pass)) {
                swap(list, pass);
            }
        }
    }
}

使用以下方式调用:

sort(node, comp);