C语言中单链表排序的详细算法解析

单链表排序算法

单链表排序是指对单链表中的节点进行排序,使得节点中的数据按照某种次序排列。C语言中,可以使用插入排序算法对单链表进行排序。

插入排序算法

插入排序算法是一种简单的排序算法,它的基本思想是:将链表中的第一个节点看作一个有序的子链表,从第二个节点开始,依次将当前节点插入到有序子链表中,使得插入之后仍然有序。

算法步骤

  • 将链表中的第一个节点看作一个有序的子链表,令其为head;
  • 从链表中的第二个节点开始,依次遍历每个节点;
  • 每次遍历一个节点,将其与有序子链表中的节点比较,找到合适的插入位置;
  • 将当前节点插入到有序子链表中,使得插入之后仍然有序;
  • 重复上述步骤,直到遍历完所有节点,即可完成排序。

算法实现

struct node
{
    int data;
    struct node *next;
};

// 单链表排序
void sort_list(struct node *head)
{
    struct node *p, *q, *r;
    if (head == NULL || head->next == NULL)
    {
        return;
    }
    p = head->next;
    head->next = NULL;
    while (p != NULL)
    {
        r = p;
        p = p->next;
        q = head;
        while (q != NULL && q->data < r->data)
        {
            q = q->next;
        }
        r->next = q->next;
        q->next = r;
    }
}

本文链接:http://task.lmcjl.com/news/6134.html

展开阅读全文