单链表排序

  单链表排序算法,代码如下:

#include <stdio.h>
#include <stdlib.h>

typedef struct Node
{
  int data;
  Node *next;
}LinkList;

void CreateLinkList(LinkList *pHeader, int nLen, int *arr)
{
  pHeader->next = NULL;
  LinkList *p;
  p = pHeader;
  for (int i = 0; i < nLen; i++)
  {
    LinkList *node = (LinkList*)malloc(sizeof(LinkList));
    node->data = arr[i];
    p->next = node;
    p = node;
  }
  p->next = NULL;
}

void SortLinkList(LinkList *pHead)
{
  LinkList *p = pHead;
  if (p == NULL)
  {
    return;
  }
  LinkList *q = p->next;
  if (q == NULL)
  {
    return;
  }
  LinkList *r = q->next;
  q->next = NULL;
  q = r;
  while(q != NULL)
  {
    r = q->next;
    p = pHead;
    while(p->next != NULL && p->next->data < q->data)
    {
      p = p->next;
    }
    q->next = p->next;
    p->next = q;
    q = r;
  }
}

void Display(LinkList *pHead)
{
  LinkList *p = pHead->next;
  while(p != NULL)
  {
    printf("%d\n", p->data);
    p = p->next;
  }
}

int _tmain(int argc, _TCHAR* argv[])
{
  int a[9] = {3,7,6,5,4,8,1,2};
  LinkList *pHead = (LinkList *)malloc(sizeof(LinkList));
  CreateLinkList(pHead, 8, a);
  SortLinkList(pHead);
  Display(pHead);
  return 0;
}

原文地址:https://www.cnblogs.com/lzmfywz/p/3000515.html