如何在C编程中对链表进行排序?

时间:2016-10-06 01:47:11

标签: c sorting linked-list

所以我试图根据名称对链表进行排序,从小到大。它对它进行排序,但它以相反或错误的方式对其进行排序。

"insert a 1"
"insert b 2"
"insert c 3"
"print"

这是我运行时输入的样子。

c/3
b/2
a/1

输出

a/1
b/2
c/3

如果尝试更改我的排序方法条件,但它仍然以错误的方式对其进行排序。我似乎无法找到这个错误。任何帮助将不胜感激。但我的输出应该看起来像这样

期望的输出

--spawn_strategy=standalone

1 个答案:

答案 0 :(得分:0)

如果您在每个插入后排序,则不需要完整的冒泡排序,只需一轮。

void sort()
{
  struct node *ptr1 = list;
  char *tmpname;
  int tmpnum;

  while (ptr1->next != NULL) { 
    if (strcmp(ptr1->name, ptr1->next->name) > 0) {
      // swap content in this case, not the nodes
      tmpname = ptr1->name;
      tmpnum = ptr1->num;

      ptr1->name = ptr1->next->name;
      ptr1->num = ptr1->next->num;

      ptr1->next->name = tmpname;
      ptr1->next->num = tmpnum;

    }
    ptr1 = ptr1->next;
  }
}