#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;
}Link;
int a[10]={12,34,503,2,12,5,74,7,112,6};
Link* CreateLink()
{
int i;
Link *head,*tail;
head=(Link* )malloc(sizeof(Link));
head->data=0;
tail=head;
Link* p;
for (i=0; i<10; ++i)
{
p=(Link* )malloc(sizeof(Link));
p->data=a[i];
p->next=NULL;
if (head==NULL)
{
head->next=p;
tail=p;
}
else
{
tail->next=p;
tail=p;
}
}
return head;
}
/******选择排序*******/
void SelectSort(Link* head)
{
if (head==NULL)
{
return;
}
Link *p=head->next;
Link *q, *min;
int temp;
for (;p;p=p->next)
{
min=q=p;
for (;q;q=q->next)
{
if (min->data > q->data)
{
min=q;
}
}
temp=min->data;
min->data=p->data;
p->data=temp;
}
}
/*******冒泡排序********/
void BubbleSort(Link* head)
{
if (head==NULL)
{
return;
}
int k=0;
int i=0;
Link *p=head->next;
Link *q;
while(p)
{
k++;
p=p->next;
}
p=head->next;
for (;p;p=p->next)
{
for(q=head->next;q->next && k-i>0; q=q->next)
{
if (q->data > q->next->data)
{
int temp=q->next->data;
q->next->data=q->data;
q->data=temp;
}
}
i++;
}
}
/*******插入排序******/
void InsertSort(Link* head)
{
if (head==NULL)
{
return;
}
Link *p=head;
Link *q=p->next;
Link *m=q;
Link *n=m->next;
while(n)
{
while(q!=n && q->data < n->data)
{
p=p->next;
q=q->next;
}
if (q==n)
{
p=head;
q=p->next;
m=m->next;
n=n->next;
}
else
{
m->next=n->next;
n->next=q;
p->next=n;
n=m->next;
p=head;
q=p->next;
}
}
}
void PrintLink(Link* head)
{
if (head==NULL)
{
return;
}
Link* p=head->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
Link* head;
head=CreateLink();
BubbleSort(head);
//SelectSort(head);
//InsertSort(head);
PrintLink(head);
return 0;
}