第2个回答 推荐于2018-03-14
刚才我试了一下,样子是这样的,但具体细节上有问题,提供一个思路
时间问题没有调试通过,如果你觉得不行,当我没回答
#include<iostream>
using namespace std;
struct node
{
int value;
struct node *next;
};
struct link
{
struct node *head;
int length;
};
void show(struct node *head);
void selectsort(struct node*head);
void insertsort(struct node*head);
void bubblesort(struct node*head);
struct node* deletion(struct node*head, int n);
void insert(struct node*head, int n, struct node *q);
void main()
{
struct link *Link;
struct node *Node=Link->head=NULL;
Link->length=0;
for(int i=0;i<5;i++)
{
Node->value=i;
Node=Node->next;
}
insertsort(Link->head);
show(Link->head);
bubblesort(Link->head);
show(Link->head);
selectsort(Link->head);
show(Link->head);
}
void bubblesort(struct node*head)
{
struct node *p=head;
struct node *q=NULL;
struct node *s=head;
for(int j=1;s->next!=NULL;j++)
{
p=s;
for(int i=1;p->next!=NULL;i++)
{
if(p->next->value>p->value)
{
q=deletion(head,i);
insert(head, i-1, q);
}
p=p->next;
}
s=s->next;
}
}
void insertsort(struct node*head)
{
struct node *p=head;
struct node *q=NULL;
struct node *s=head->next;
for(int i=1;s!=NULL;i++)
{
int j=0;
while(p->next->value<s->next->value)
{
j++;
}
if(i!=j)
{
q=deletion(head, i);
insert(head, j, p);
}
s=s->next;
}
}
void selectsort(struct node *head)
{
struct node *p=head;
struct node *q=NULL;
struct node *s=head->next;
for(int i=0;s->next!=NULL;i++)
{
int max=s->value;
p=s->next;
for(int j=i+1;p!=NULL;j++)
{
if(p->value>s->value)
{
q=deletion(head, i);
insert(head, j, q);
}
p=p->next;
}
}
}
struct node*deletion(struct node *head, int n)
{
struct node *q=NULL;
struct node *p=head;
if(n==1)
{
q=head;
head=head->next;
}
else
{
int i=1;
while(i<n)
{
p=p->next;
}
q=p->next;
p->next=p->next->next;
}
return p;
}
void insert(struct node *head, int n, struct node *q)
{
struct node* p=head;
int i=1;
while(i<n)
{
p=p->next;
}
q->next=p->next;
p->next=q;
}
void show(struct node *head)
{
struct node *p=head;
while(p)
{
cout<<p->value<<endl;
p=p->next;
}
}本回答被提问者和网友采纳