void sortowanie(LISTA *pocz,int ile)
{
if(ile==0 || ile==1) return;
if(ile==2){
LISTA tmp1=(*pocz),tmp2=(*pocz)->nast;
if(strcmp(tmp1->slowo,tmp2->slowo)>0){
tmp1->nast=tmp2->nast;
tmp2->nast=tmp1;
(*pocz)=tmp2;
return;
}
return;
}
LISTA pierwszy=(*pocz),poprzedni=pierwszy,porownany1=poprzedni->nast,porownany2=porownany1->nast,tmp=NULL;
while(porownany2){
if(strcmp(porownany1->slowo,porownany2->slowo)>0){
//zamiana elementow
poprzedni->nast=porownany2;
porownany1->nast=porownany2->nast;
porownany2->nast=porownany1;
//powrot na poczatek listy
poprzedni=pierwszy;
porownany1=pierwszy->nast;
porownany2=porownany1->nast;
continue;
}
poprzedni=poprzedni->nast;
porownany1=porownany1->nast;
porownany2=porownany2->nast;
}
LISTA drugi=NULL,trzeci=NULL;
tmp=pierwszy;
drugi=tmp->nast;
trzeci=drugi->nast;
while(drugi && trzeci){
if(strcmp(pierwszy->slowo,drugi->slowo)>0 && strcmp(pierwszy->slowo,trzeci->slowo)<0){
pierwszy=pierwszy->nast; (*pocz)=pierwszy;
drugi->nast=tmp;
tmp->nast=trzeci;
return;
}
drugi=drugi->nast;
trzeci=trzeci->nast;
}
if(trzeci==NULL){
pierwszy=pierwszy->nast; (*pocz)=pierwszy;
drugi->nast=tmp;
tmp->nast=trzeci;
return;
}
}