Ещё вопрос, теперь по сортировке.
Необходимо отсортировать двухсвязанный список в порядке возрастания по элементу sps->expert с помощью функции form1().
Допустим есть изначально следующий список (функция views()):
| expert | family | ochki |
|--------------------------------|
| 7 | krotov | 3 |
| 7 | popov | 2 |
| 7 | sidopov | 1 |
| 2 | semenov | 3 |
| 2 | sidopov | 2 |
| 2 | ivanov | 1 |
| 4 | sidorov | 3 |
| 4 | chein | 2 |
| 4 | petrov | 1 |
|--------------------------------|
Необходимо получить вот такой следующий:
expert | family | ochki |
|--------------------------------|
| 2 | semenov | 3 |
| 2 | sidopov | 2 |
| 2 | ivanov | 1 |
| 4 | sidorov | 3 |
| 4 | chein | 2 |
| 4 | petrov | 1 |
| 7 | krotov | 3 |
| 7 | popov | 2 |
| 7 | sidopov | 1 |
|--------------------------------|
Получается такой:
expert | family | ochki |
|--------------------------------|
| 7 | krotov | 3 |
| 7 | popov | 2 |
| 7 | sidopov | 1 |
|--------------------------------|
В чём моя ошибка? Помогите разобраться.
Код:

#define TRUE 1
#define FALSE 0
......
struct expt{int expert;char sport[20];int mesto;};
struct record{expt sps; record *prior;record *next;}*begin,*last,*list;
.......
void form1()
{
int is_sort=FALSE;
if(begin==NULL){clrscr();printf("Spisok not avialible.\n Press any key... ");getch();return;} //если списка не существует, выходим
if(begin->next==NULL){clrscr();printf("One element of spisok.\n Press any key... ");getch();return;}//если один элемент списка,
//зачем ,сортировать?
while(!is_sort){ //выход из цикла -- is_sort==TRUE. "Пробегаем" в цакле по списку, пока не отсортируем
is_sort=TRUE; // предпологаем, что список уже отсортирован
for(last=begin;last->next!=NULL;){ //цикл существует, пока есть за указателем last есть следующий элемент
list=last;
last=last->next;
if(list->sps.expert>last->sps.expert){ //если предыдущий элемент списка больше последующего
// то меняем указатели местами
list->next=last->next;
if(last->next==NULL);
else last->next->prior=list;
if(list->prior==NULL);
else list->prior->next=last;
last->prior=list->prior;
last->next=list;
list->prior=last;
is_sort=FALSE; // чтобы ещё раз просмотреть список и отсортировать, если, он не отсортирован
}
}
}
}
.......
void main(){
begin=NULL;
last=NULL;
char c;
load(FILE_DB);
while(1){printmenu();
scanf("%s",&c);
switch(c){
case '1':{clr("db1.dat");break;}
case '2':{edit();break;}
case '3':{views();break;} //просматриваем содержимое списка в памяти
case '4':{form1();break;} //сортируем содержимое списка по элементу expert структуры expt
case '0':return;
default:{printf("\n Error !\n Can't no right selection item\n Press any key...");getch();break;}
}
}
}