求一个C语言单链表的排序函数,很急很急

升序!!!!只要函数,最好能有些注释(因为每人命名变量名的习惯都不一样)
谢谢啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

用选择排序就行,代码如下。
链表结构如下:
typedef struct Node
{
T value;
struct Node *link;
}Node;

void selectSort(Node *node)
{
Node *cur; /*当前节点*/
Node *next; /*遍历未排序节点*/
Node *min; /*指向未排序节点中最小节点*/
T temp;
/*从头节点的下一个节点开始,一直到倒数第二个节点*/
for(cur = node->link; cur->link->link != 0; cur = cur->link)
{
min = cur;
/*从当前节点的下一个节点开始比较,找出最小值,用min指向,也就是找出未排序部分最小值放到已排序的下一位置*/
for(next = next->link; next != 0; next = next->link)
if(min->value > next->value)
min = next;
/*交换*/
temp = cur->value;
cur->value = min->value;
min->value = temp;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-25
//链表的打印\排序
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
int data;
struct node *next;
}LNode,*LinkList;

void InitList (LinkList *L)
{
*L=(LNode*)malloc(sizeof(LNode));
(*L)->next=NULL;
}

void CreatFromTail(LinkList L)
{
int x;
LNode *r,*s;
r=L;
printf("please input number(>0),end with-1:\n");
while(1)
{
scanf("%d",&x);
if(x>0)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
}
else
{
r->next=NULL;
break;
}
}
}

void Output (LinkList L)
{
LNode *p;
p=L->next;
while(p!=NULL)
{
printf("%-5d",p->data);
p=p->next;
}
}

void Sort(LinkList L)
{
LNode *p,*q,*k;
LNode t;
p=L->next;
while (p->next)
{
k=p;
q=p->next;
while(q!=NULL)
{
if((k->data)>(q->data))
k=q;
else
q=q->next;
}
if(k!=p)
{
t=*p;
*p=*k;
*k=t;
t.next=p->next;
p->next=k->next;
k->next=t.next;
}
p=p->next;
}
}

void Destory(LinkList L)
{
LNode *p,*q;
p=L;
q=L->next;
while(q!=NULL)
{
free(p);
p=q;
q=q->next;
}
free(q);
}

int main(void)
{
LinkList L;
InitList (&L);
CreatFromTail (L);
Output (L);
printf("\n");
Sort(L);
printf("the sort numbers:");
Output (L);
printf("\n");
Destory(L);
return 0;
}
程序很简单,没有注释也应该能看懂。