单链表排序算法,代码如下:
#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;
}