#include "stdio.h"
#include "stdlib.h"
typedef struct linknode
{
int data;
struct linknode *next;
}linklist;
int create_linklistT(linklist *&L,int a[],int n)
{
int i;
linklist *r,*p;
L=(linklist *)malloc(sizeof(linklist));
r=L;
for(i=0;i<n;i++)
{
p=(linklist *)malloc(sizeof(linklist));
p->data=a[i];
r->next=p;
r=p;
}
r->next=NULL;
}
int showLinklist(linklist *L)
{
linklist *p;
p=L->next;
while(p!=NULL)
{
printf(" %d ",p->data);
p=p->next;
}
printf("\n");
}
int select_sort_link(linklist *L)
{
linklist *p,*q,*r,*s,*spre,*qpre;
p=L->next;
L->next=NULL;r=L;
while(p!=NULL)
{
q=p;s=p;qpre=q;spre=s;
while(q!=NULL)
{
if(q->data<s->data)
{
spre=qpre;s=q;
}
else
{
qpre=q;q=q->next;
}
}
if(s==p)
{
p=p->next;
r->next=s;
r=s;
}
else
{
spre->next=s->next;
r->next=s;
r=s;
}
r->next=NULL;
showLinklist(L);
}
r->next=NULL;
}
int insert_sort_link(linklist *L)
{
linklist *p,*pre,*q,*s;
q=L->next;
L->next=NULL;
while(q!=NULL)
{
s=q->next;
p=L->next;pre=L;
while(p!=NULL&& q->data>p->data)
{
pre=p;p=p->next;
}
q->next=pre->next;
pre->next=q;
q=s;
showLinklist(L);
}
}
int bubble_sort_link(linklist *L)
{
linklist *pre,*p;
int flag=0,temp;
while(flag==0)
{ flag=1;
pre=L->next;p=pre->next;
while(p!=NULL)
{
if(pre->data>p->data)
{
temp=pre->data;pre->data=p->data;p->data=temp;
flag=0;
}
pre=p;p=p->next;
}
}
}
int bubble_sort_link1(linklist *L)
{
linklist *pre,*p,*tail;
int flag=0,temp;
pre=L->next;p=pre->next;tail=NULL;
while(p!=tail&&flag==0)
{ flag=1;
while(p!=tail)
{
if(pre->data>p->data)
{
temp=pre->data;pre->data=p->data;p->data=temp;
flag=0;
}
pre=p;p=p->next;
}
tail=pre;
pre=L->next;p=pre->next;
showLinklist(L);
}
}
int main()
{ int a[10]={3,2,1,4,7,6,5,10,9,8};
int n=10;
linklist *L;
create_linklistT(L,a,n);
showLinklist(L);
// select_sort_link(L);
// insert_sort_link(L);
bubble_sort_link1(L);
showLinklist(L);
return 1;
}