M
motobiker93
Задача отсортировать рекурсивно список методом выбора минимального элемента и перестановки его в начало.
C++:
#include<stdio.h>
#include<stdlib.h>
struct sp
{
int inf;
struct sp *next;
}*f=NULL;
void poisk(struct sp *p,int coun)
{
struct sp *k=0,*m=f,*l=f,*t=NULL,*pp=NULL,*temp=NULL;
int min=0,ko=0;
while(ko<coun/2) //return;
//if(ko>=coun/2) return;
{
min=m->inf;
for(t=m;t!=NULL;t=t->next)
{
if(t->inf<min)
{
min=t->inf; k=t;
}
}
if(k->next!=NULL)
{
for(t=m;t->next!=k->next;t=t->next)
pp=t;
temp=k->next;
k->next=m->next;
pp->next=m;
m->next=temp;
m=k;
}
else
if(k->next==NULL)
{
for(t=m;t->next!=NULL;t=t->next)
pp=t;
p->next=m->next;
pp->next=m;
m->next=NULL;
m=p;
}
ko++;
// printf("%d",m->inf);
//printf("\n");
//l=m;
if(ko==1)l->next=m->next;
m=m->next;
//for(t=m;t!=NULL;t=t->next)
//printf("\n %d", t->inf);
//printf(" ");
//poisk(p,coun);
}
f=l->next;
for(t=f;t!=NULL;t=t->next)
printf("\n %d", t->inf);
return;
}
void main()
{
struct sp *t=0,*p=0,*m=NULL;
int ans=0,check=0, coun=0,min=0;
while(1)
{
printf("\n Dobavite element 1/0 \n");
scanf("%d",&ans);
if(ans==0) break;
t=malloc(sizeof(struct sp));
if(t==NULL)
{
printf("\n ne ydalos videlit pamiat");
break;
}
t->next=NULL;
printf("\n vvedite elementi spiska");
check=scanf("%d",&t->inf);
if(check==0)
{
printf("\n error in statement");
return;
}
if(f==NULL)
{
f=t; p=t;
}
else
{
p->next=t; p=t;
}
}
for(t=f;t!=NULL;t=t->next)
coun++;
m=f;
poisk(p,coun);
// for(t=f;t!=NULL;t=t->next)
// printf("\n %d", t->inf);
for(t=f;t!=NULL;t=f)
{
f=f->next;
free(t);
}
}