插入排序
#include<stdio.h>
#include<stdlib.h>
int n;
typedef struct LinkList{
int val;
struct LinkList *next;
}LNode;
LNode* InsertionSort(LNode* head)
{
if(head==NULL||head->next==NULL)
return head;
LNode *p,*start,*end,*pre,*post;
/*
start,end为排好序的新链表始末,在pre,post中插入结点,p用以遍历整个链表
*/
start=(LNode*)malloc(sizeof(LNode));
start->next=head;
end=head;
p=end->next;
while(p)
{
pre=start;post=start->next;
while(post!=p&&p->val>=post->val)
{
post=post->next;
pre=pre->next;
}
if(post==p) end=p;
else{
end->next=p->next;
p->next=post;
pre->next=p;
}
p=end->next;
}
head=start->next;
free(start);
return head;
}
int main()
{
scanf("%d",&n);
LNode *head,*p;
head=(LNode*)malloc(sizeof(LNode));
p=head;
while(n--)
{
scanf("%d",&p->val);
if(n==0) p->next=NULL;
else{
p->next=(LNode*)malloc(sizeof(LNode));
p=p->next;
}
}
head=InsertionSort(head);
for(p=head;p;p=p->next)
printf("%d ",p->val);
return 0;
}