我在排序链表时遇到问题。我想对它进行两次排序,如下所示:
输入
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);
}
}
}
答案 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);