Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2011, 21:40   #1
Jigarkhwar
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 15
По умолчанию Сортировка Очереди методом heapsort

Идея такая, есть очередь она сортируется методом пирамиды.

Я написал просеивание пока, что код фиговый. Я бы даже сказал быдлокод, помогите привести к нормальному виду и дописать сортировку. возможно это просеивание можн сделать через рекурсию а не плодить кучу циклов.


Ещё кстати вопросик, работает только если ввести нечетное кол-во элементов. Всё дело в temp3, когда у родителя всего 1 сын, то temp3 остается прежним и меняется местами с другими значениями. Какую проверку сделать, что бы перемена элементов местами отрабатывала верно.
Код:
// HeapSort_Queue.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <locale>

using namespace std;

class Queue {

public:
/*struct node 
{*/

int item; /*node**/ Queue* next;
Queue(int x)
{ item =x; next =0; }
//};

typedef /*node*/ Queue *link;
link head, tail;

Queue ( )
{ head=0; } 

int isEmpty()
{
return head==0;
};

void put(int x)
{ 
link t = tail;
tail = new /*node*/ Queue (x);
if ( isEmpty() )
head = tail;
else t->next = tail;
};

int get()
{
int v = head->item;
link t = head->next;
delete head; head = t;
return v;
};

void print(int x)
{
while(!(x==0) )
{
cout<<get( )<<' ';
--x;
}
cout<<endl;
};

};



int _tmain(int argc, _TCHAR* argv[])
{
system ("chcp 1251"); 
Queue que;
int i,j,k,num=0,parent,childL,childR;
int temp1,temp2,temp3,pckt;


cout<<"кол-ва элементов ";cin>>i;cout<<endl;

while(!(num==i))
{
++num;
que.put(num);
}

k=num;
while (!((k/2)==0)){

for (parent=1;parent<=num/2;parent++){
childL=(2*parent);
childR=(2*parent+1); 

for(j=1;j<=num;j++){

if (j==parent)
{
temp1=que.head->item;
cout<<temp1<<endl;
}
if ((j==childL)&&(childL<=num))
{
temp2=que.head->item;
cout<<temp2<<endl;
}
if ((j==childR)&&(childR<=num))
{
temp3=que.head->item;
cout<<temp3<<endl;
}

que.tail->next=que.head;
que.tail=que.head;
que.head=que.head->next;

}

if ((temp2>temp3) && (temp2>temp1)){
pckt=temp1;
temp1=temp2;
temp2=pckt; 
}
if ((temp3>temp2) && (temp3>temp1)){
pckt=temp1;
temp1=temp3;
temp3=pckt; 
}

for(j=1;j<=num;j++){

if (j==parent)
{
que.head->item=temp1;
cout<<temp1<<endl;
}
if ((j==childL)&&(childR<=num))
{
que.head->item=temp2;
cout<<temp2<<endl;
}
if ((j==childR)&&(childR<=num))
{
que.head->item=temp3;
cout<<temp3<<endl;
}

que.tail->next=que.head;
que.tail=que.head;
que.head=que.head->next;

}

}
--k;
}



que.print(num);





system("pause");
return 0;
}

Последний раз редактировалось Jigarkhwar; 09.11.2011 в 21:50.
Jigarkhwar вне форума Ответить с цитированием
Старый 12.11.2011, 19:05   #2
Jigarkhwar
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 15
По умолчанию

ну что никто не поможет ?
Jigarkhwar вне форума Ответить с цитированием
Старый 12.11.2011, 19:24   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Вот, держите.
_-Re@l-_ вне форума Ответить с цитированием
Старый 13.11.2011, 01:23   #4
Jigarkhwar
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 15
По умолчанию

Мне именно через очередь надо построенную на указателях, просто прошу подкорректировать мой код чтоб он выглядел лучше.

Последний раз редактировалось Jigarkhwar; 13.11.2011 в 01:54.
Jigarkhwar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка очереди. [c++] Jigarkhwar Помощь студентам 8 28.09.2011 23:12
Сортировка методом пирамиды. Dj Troy Паскаль, Turbo Pascal, PascalABC.NET 7 08.04.2011 20:03
Heapsort string в файле skorpi Помощь студентам 0 10.03.2011 17:41
Сортировка методом пузырька fygas1991 Общие вопросы C/C++ 5 15.11.2009 21:39
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52