Witam, mam mały problem, ponieważ potrzebuję posortować listę jednokierunkową przy pomocy dwóch funkcji( znajdującej minimum na liście, i umieszczającej znaleziony element na początek listy). Przy wywołaniu programu powiedzmy: 2 3 1. Funkcja sort zaczyna działać ładnie w 2 pierwszy krokach a przy 3 kroku znaleziony element nagle to 1 3 i nie mogę zrozumieć skąd pojawia się nagle ta 1. Czy ktoś może pomóc ?
KOD
element *przestaw2(element *l, element *s)
{
element *h = l;
if (l == s) return s;
while (l->nast != s && l->nast!=0)
{
l = l->nast;
}
l->nast = l->nast->nast;
s->nast = h;
return s;
}
element *najmniejszy(element *l)
{
element *h = l, *a, *i=l;
int dane;
dane = i->dane;
a = i;
while (i)
if (i->dane<dane)
{
a = i;
dane = i->dane;
}
else
{
i = i->nast;
}
return a;
}
element *sortuj(element *l)
{
element *nowy=l, *h = l, *a = l, *s;
while (a)
{
printf("Co pokazuje a\n");
drukl_2(a);
printf("\n||||||||||||||\n");
s = najmniejszy(a);
printf("znaleziony");
printf("\n----------\n");
drukl_2(s);
getchar();
getchar();
printf("\n----------\n");
l = przestaw2(l, s);
printf("lista");
printf("\n----------\n");
drukl_2(l);
getchar();
getchar();
printf("\n----------\n");
a = a->nast;
}
return l;
}
int main()
{
element *p, *s;
test = NULL;
p = NULL;
printf("Hello\n");
scanf("%d", &x);
while (x != 0)
{
p = dodk(x, p);
scanf("%d", &x);
}
//p=przestaw(p,s);
printf("-------\n");
drukl_2(p);
s = najmniejszy(p);
printf("\nNajmniejszy: ");
drukl_2(s);
p = przestaw2(p, s);
printf("\n po przestawieniu:\n");
drukl_2(p);
printf("--- A teraz po sortowaniu ---\n");
//p = usun_parzyste2(p);
p=sortuj(p);
drukl_2(p);