CC++Qt « Сортировка пузырьком в списке.
Пробую писать базу простейшую. Одна из функций должна сортировать по алфавиту содержимое (список сотрудников по фамилии), пытаюсь сделать это методом простой перестановки (пузырька). Не пойму где ошибся, но программа аварийно завершает работу. Прошу совета.
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .cpp.geshi_code {font-family:monospace;} .cpp.geshi_code .imp {font-weight: bold; color: red;} .cpp.geshi_code .kw1 {color: #0000ff;} .cpp.geshi_code .kw2 {color: #0000ff;} .cpp.geshi_code .kw3 {color: #0000dd;} .cpp.geshi_code .kw4 {color: #0000ff;} .cpp.geshi_code .co1 {color: #666666;} .cpp.geshi_code .co2 {color: #339900;} .cpp.geshi_code .coMULTI {color: #ff0000; font-style: italic;} .cpp.geshi_code .es0 {color: #000099; font-weight: bold;} .cpp.geshi_code .es1 {color: #000099; font-weight: bold;} .cpp.geshi_code .es2 {color: #660099; font-weight: bold;} .cpp.geshi_code .es3 {color: #660099; font-weight: bold;} .cpp.geshi_code .es4 {color: #660099; font-weight: bold;} .cpp.geshi_code .es5 {color: #006699; font-weight: bold;} .cpp.geshi_code .br0 {color: #008000;} .cpp.geshi_code .sy0 {color: #008000;} .cpp.geshi_code .sy1 {color: #000080;} .cpp.geshi_code .sy2 {color: #000040;} .cpp.geshi_code .sy3 {color: #000040;} .cpp.geshi_code .sy4 {color: #008080;} .cpp.geshi_code .st0 {color: #FF0000;} .cpp.geshi_code .nu0 {color: #0000dd;} .cpp.geshi_code .nu6 {color: #208080;} .cpp.geshi_code .nu8 {color: #208080;} .cpp.geshi_code .nu12 {color: #208080;} .cpp.geshi_code .nu16 {color:#800080;} .cpp.geshi_code .nu17 {color:#800080;} .cpp.geshi_code .nu18 {color:#800080;} .cpp.geshi_code .nu19 {color:#800080;} .cpp.geshi_code .me1 {color: #007788;} .cpp.geshi_code .me2 {color: #007788;} .cpp.geshi_code span.xtra { display:block; }
void sort()
{
system("cls");
if(a==0)
{
cout<<"nБаза данных в оперативной памяти не инициализированна.";
getch();
return;
}
p1=FIRST;
int change=1;
system("cls");
while(change)
{
change=0;
while(p1->pPrev!=NULL)
{
p1=p1->pPrev;
}
FIRST=p1;
do
{
p2=p1;
p1=p1->pNext;
if(strcmp(p2->FName,p1->FName)>0)
{
p2->pNext=p1->pNext;
p1->pNext->pPrev=p2;
p2->pPrev->pNext=p1;
p1->pPrev=p2->pPrev;
p1->pNext=p2;
p2->pPrev=p1;
change++;
}
}
while(p1->pNext!=NULL);
}
}
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .cpp.geshi_code {font-family:monospace;} .cpp.geshi_code .imp {font-weight: bold; color: red;} .cpp.geshi_code .kw1 {color: #0000ff;} .cpp.geshi_code .kw2 {color: #0000ff;} .cpp.geshi_code .kw3 {color: #0000dd;} .cpp.geshi_code .kw4 {color: #0000ff;} .cpp.geshi_code .co1 {color: #666666;} .cpp.geshi_code .co2 {color: #339900;} .cpp.geshi_code .coMULTI {color: #ff0000; font-style: italic;} .cpp.geshi_code .es0 {color: #000099; font-weight: bold;} .cpp.geshi_code .es1 {color: #000099; font-weight: bold;} .cpp.geshi_code .es2 {color: #660099; font-weight: bold;} .cpp.geshi_code .es3 {color: #660099; font-weight: bold;} .cpp.geshi_code .es4 {color: #660099; font-weight: bold;} .cpp.geshi_code .es5 {color: #006699; font-weight: bold;} .cpp.geshi_code .br0 {color: #008000;} .cpp.geshi_code .sy0 {color: #008000;} .cpp.geshi_code .sy1 {color: #000080;} .cpp.geshi_code .sy2 {color: #000040;} .cpp.geshi_code .sy3 {color: #000040;} .cpp.geshi_code .sy4 {color: #008080;} .cpp.geshi_code .st0 {color: #FF0000;} .cpp.geshi_code .nu0 {color: #0000dd;} .cpp.geshi_code .nu6 {color: #208080;} .cpp.geshi_code .nu8 {color: #208080;} .cpp.geshi_code .nu12 {color: #208080;} .cpp.geshi_code .nu16 {color:#800080;} .cpp.geshi_code .nu17 {color:#800080;} .cpp.geshi_code .nu18 {color:#800080;} .cpp.geshi_code .nu19 {color:#800080;} .cpp.geshi_code .me1 {color: #007788;} .cpp.geshi_code .me2 {color: #007788;} .cpp.geshi_code span.xtra { display:block; }
void sort()
{
system("cls");
if(a==0)
{
cout<<"nБаза данных в оперативной памяти не инициализированна.";
getch();
return;
}
p1=FIRST;
int change=1;
system("cls");
while(change)
{
change=0;
while(p1->pPrev!=NULL)
{
p1=p1->pPrev;
}
FIRST=p1;
do
{
p2=p1;
p1=p1->pNext;
if(strcmp(p2->FName,p1->FName)>0)
{
p2->pNext=p1->pNext;
p1->pNext->pPrev=p2;
p2->pPrev->pNext=p1;
p1->pPrev=p2->pPrev;
p1->pNext=p2;
p2->pPrev=p1;
change++;
}
}
while(p1->pNext!=NULL);
}
}
1 ответов
p2->pNext->pNext=p1; - кажется вот тут ошибка, т.к p2->pNext уже переопределен (p2->pNext=p1->pNext;)
На вот здесь посмотри, думаю поможет
http://algolist.ru/sort/bubble_sort.php