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

sort linked list twice in c language

我在对链表进行排序时遇到问题。我想对它进行两次排序,像这样:

输入

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

    }
 }
}

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