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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 23:09   #1
parkito
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 24
По умолчанию Сортировка деревом

Всем привет. Нужна помощь. Нужно написать алгоритм сортировки деревом. вот попытался написать
Код:
#include <iostream>       
 using namespace std;
 int main()
 {
	 int l=0,r=11,i,j,index,x,item,a[]={1,4,55,45,456,12,4,9,3,1,4};
	for(i=l,j=2*l;x=a[l];j<r&&a[j+1]<a[j])
		{j=j+1;
	while(j<=r&&a[j]<x)
	{a[i]=a[j];i=j;j=2*j;
	if(j<r&&a[j+1]<a[j])
	j=j+1;
	}}
	for(int q=0;q<11;q++)
		cout<<a[q]<<endl;
 cin.get();
 cin.get();
 return 0;}
у меня не получилось. Прошу помощи
parkito вне форума Ответить с цитированием
Старый 21.12.2011, 03:06   #2
Trust_357
Пользователь
 
Регистрация: 10.03.2011
Сообщений: 68
По умолчанию

Ну вообще бинарное дерево вот такое)))
Код:
#pragma once
#include "stdafx.h"
template<class T,class K>
class My_Tree
{
private:
	class Item //Класс описывающий элемент бинарного дерева
	{
	private:
		friend class My_Tree; //Обьявление обьемлющего класса дружественным
		Item *parent; //Указатель на родителя
		Item *left; //Указатель на левого потомка
		Item *right; //Указатель на правого потомка
		T value; //значение
		K key; //ключ
		Item(T value,K key,Item *parent=NULL,Item *left=NULL,Item *right=NULL):key(key),value(value),left(left),right(right),parent(parent){ //конструктор элемента дерева
		}
	};
	Item *root; //указатель на корневой элмент дерева
	int (*CompareFunction)(K a,K b); //указатель на метод для сравнения двух ключей
	static int Inner_Compare(K a,K b){ //метод использующийся по умолчанию для сравнения двух ключей
		return a-b;
	}
	void Add(T value,K key,Item *item){
		if(CompareFunction(item->key,key)==0)
		{
			item->value=value;
			return;
		}
		if(CompareFunction(item->key,key)>0)
		{
			if(item->right)
				Add(value,key,item->right);
			else
				item->right=new Item(value,key,item);
		}
		else
		{
			if(item->left)
				Add(value,key,item->left);
			else
				item->left=new Item(value,key,item);
		}
	}
	void Remove(Item *item){
		if(item->left)
			Remove(item->left);
		if(item->right)
			Remove(item->right);
		delete item;
	}
	void Print(Item *item){
		if(item->left)
			Print(item->left);
		std::cout<<item->key<<"=>"<<item->value<<std::endl;
		if(item->right)
			Print(item->right);
	}
	T &Alert_For_Index(K key,Item *item){
		if(CompareFunction(item->key,key)==0)
			return item->value;
		if(CompareFunction(item->key,key)>0)
		{
			if(item->right==NULL)
			{
				int a=2147483648;
				cout<<"\tError!!! Invalid key!!!\n";
				return (T) a;
			}
			else
				Alert_For_Index(key,item->right);
		}
		else
		{
			if(item->left==NULL)
			{
				int a=2147483648;
				cout<<"\tError!!! Invalid key!!!\n";
				return (T) a;
			}
			else
				Alert_For_Index(key,item->left);
		}
	}
public:
	My_Tree(int(*Compare)(K a,K b)=My_Tree::Inner_Compare):CompareFunction(Compare),root(NULL){ //конструктор дерева
	}
	void Add(T value,K key){
		if(root)
			Add(value,key,root);
		else
			root=new Item(value,key);
	}
	void Remove_All(){
		if(root)
			Remove(root);
		root=NULL;
	}
	~My_Tree(){
		if(root)
			Remove_All();
	}
	void Print(){
		if(root)
			Print(root);
		else
			std::cout<<"Tree is Empty!!!"<<std::endl;
	}
	T &operator[](K key){
		if(root)
		{
			return Alert_For_Index(key,root);
		}
		else
		{
			int a=2147483648;
			cout<<"\tYour Stack is Empty!!!\n";
			return (T)a;
		}
	}
	T &Find_Element(K key){
		if(root)
		{
			if()
		}
		else
		{
			cout<<"\tYour Stack is Empty!!!\n";
			return T(2147483648);
		}
	}
};
Учитель начал, Я не дописал)))
Trust_357 вне форума Ответить с цитированием
Старый 21.12.2011, 07:36   #3
parkito
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 24
По умолчанию

а мне бы просто алгоритм, без ООП было бы достаточно.
parkito вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с деревом oooooo111 Общие вопросы Delphi 1 30.04.2011 01:21
Проблемы с деревом Aleksandr БД в Delphi 1 29.04.2011 13:48
Работа с деревом C# Мария_С. Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 18.04.2011 20:13
Сортировка двоичным деревом Anubys Помощь студентам 0 09.04.2011 08:33
Работа с деревом. Gon Паскаль, Turbo Pascal, PascalABC.NET 1 18.01.2009 20:24