Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка двунаправленного списка, помогите найти ошибку 
:(
    Опции темы
marysia
Дата 22.3.2006, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 22.3.2006

Репутация: нет
Всего: нет



Нужно отсортировать двунаправленный список пузырьком.Ошибка сама в сортировке, где не могу разобраться.
.

Код

#include <iostream.h>
const n=4;
struct Node
{
     int chislo;
     Node *next;
     Node * pred;
};

class list
{
public:
Node *head;

unsigned int count;
list(){count=0;head=NULL;};
~list(){cout<<"DESTRUCTOR\n";};
Node*Get_Node(unsigned int index);
void vivod();
void sort_uk(unsigned int n_u1,unsigned int n_u2);
void sort();
void add(int ch);
};
////////
void list::add(int ch)
{
     Node *now=new Node();
     now->chislo=ch;
     now-> next=NULL;
     if (head==NULL) {head=now;now->pred=NULL;}
     else
     {
          now->pred=Get_Node(count);
          Get_Node(count)->next=now;

     }count++;
}
////////

Node* list::Get_Node(unsigned int index)
{ Node*E=head;
if (head==NULL) return NULL;
unsigned int i=1;
while (i!=index)
{E=E->next;
i++;
}
return E;}
////////////
void list::vivod()
{
cout<<"\nNash spisok\n";
Node *p=head;
while(p!=NULL)
{
     cout<<p->chislo<<"\n";
     p=p->next;
}

}
//////////
void list::sort_uk(unsigned int n_u1,unsigned int n_u2)
{
if (Get_Node(n_u1)==head)
{ Node*p1, *p2, *p3;
 p1=Get_Node(n_u1);
 p2=Get_Node(n_u2);
 p3=Get_Node(n_u2)->next;
 p1->next=p3;
 p3->pred=p1;
 p1->pred=p2;
 p2->next=p1;
 p2->pred=NULL;
 head=p2;


}
else
{Node*p1, *p2, *p3;
     p1=Get_Node(n_u1);
 p2=Get_Node(n_u2);
 p3=Get_Node(n_u2)->next;
 p1->next=p3;
 p3->pred=p1;
 p1->pred=p2;
 p2->next=p1;
 p2->pred=NULL;}
}
//////////
void list::sort()
{unsigned int i,j,k;
Node*E=head;Node *pp;
for (i=1;i<=n;i++)
 for (j=1;j<=n-i;j++)
 if ( (pp->chislo) > ((pp->next) ->chislo) ) sort_uk(j,j+1);
}
///////////


void main()
{list* my=new list();
my->add(4);
my->add(5);
my->add(3);
my->add(2);
my->add(1);
my->add(6);
my->add(7);
my->vivod();
my->sort();
my->vivod();

}


Это сообщение отредактировал(а) marysia - 22.3.2006, 20:28
PM MAIL   Вверх
MAKCim
Дата 22.3.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



трудно такой код читать
может так
Код

...
void swap(Node*& __a, Node*& __b)
{
    Node* temp_a__=__a->next, *temp_b__=__b->pred;
    __a->next=__b->next;
    __b->pred=__a->pred;
    __b->next=temp_a__;
    __a->pred=temp_b__;
    if (__a->next) __a->next->pred=__a;
    if (__b->pred) __b->pred->next=__b;
}

void list::sort()
{
    Node* ptr__=head;
    do
    {
        Node* temp__=ptr__, *min__=ptr__;
        while (temp__)
        {
            if (temp__->chislo<min__->chislo) min__=temp__;
            temp__=temp__->next;
        }
        if (ptr__!=min__) swap(ptr__,min__);
        if (ptr__==head) head=min__;
        ptr__=min__->next;
    }
    while (ptr__);
}

сразу говорю код не проверял


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0664 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.