Alguem me ajude é simples/Algoritmo

3 respostas
J

Alguem pode me ajudar nesse algoritmo,
Existe alguma coisa de errado, nao consigo achar…

Agradeço quem puder me ajudar…

Segue algoritmo HeapSort abaixo.

public class  AlgoritmoHeap

{

public static void main(String[] args)

{
int w[]=new int[6]; //Declaracao do Vetor de 6 posicoes
	w[1]=9;
	w[2]=8;
	w[3]=3;
	w[4]=5;
	w[5]=6;
	w[6]=7;

	int n=6;
	int dir=0;
	int esq=0;
	int i=0;
	int x=0;
	int j=0;

		 //Montando o primeiro heap
		esq = (n/2) +1;
		dir=n;
		
		while (esq>1)
		{
			esq=esq-1;
	        i=esq;
	        j=2*i;
	        x=w[i];
		}


				while (j<=dir) || (x<w[j])
				{
					if ((j < dir) || (w[j] < w[j+1]))
					{
						j= j+1;
					}

				}
					if (x<w[j])
					{
							w[i]= w[j];
							i= j;
							j= 2 * i;
					}
					      w[i]= x;

			//Ordenando o vetor
			while (dir>1)
				{
				x=w[1];
			   w[1]=w[dir];
				w[dir]=x;
				dir=dir -1;
		
		//Montando um novo heap
		i=esq;
		j=2 * i;
		x=w[i];

}

while ((j <= dir) || (x< w[j]))

{

if ((j < dir) || (w[j]<w[j+1]))

{

j= j+1;

}

if (x < w[j])

{

w[i]=w[j];

i=j;

j=2 * i;

}

w[i]=x;

}

}

}

3 Respostas

N

segue o código compilando… mas dá IndexOutOfBoundsException pq vc deve ter feito td considerando as posições do vetor de 1 a 6, enquando em java (assim como em C/C++) a primeira posição é 0 e a útima é o tamanho menos 1. Eu comentei as alterações q fiz…

public class AlgoritmoHeap 
&#123; 
public static void main&#40;String&#91;&#93; args&#41; 
&#123; 

int w&#91;&#93;=new int&#91;6&#93;; //Declaracao do Vetor de 6 posicoes 
// a primeira posição de um vetor em java é 0
w&#91;0&#93;=9; 
w&#91;1&#93;=8; 
w&#91;2&#93;=3; 
w&#91;3&#93;=5; 
w&#91;4&#93;=6; 
w&#91;5&#93;=7; 

int n=5; // taba int n=6
int dir=0; 
int esq=0; 
int i=0; 
int x=0; 
int j=0; 

//Montando o primeiro heap 
esq = &#40;n/2&#41; +1; 
dir=n; 

while &#40;esq&gt;1&#41; 
&#123; 
esq=esq-1; 
i=esq; 
j=2*i; 
x=w&#91;i&#93;; 
&#125; 


while &#40;&#40;j&lt;=dir&#41; || &#40;x&lt;w&#91;j&#93;&#41;&#41; // faltava parenteses antes e depois 
&#123; 
if &#40;&#40;j &lt; dir&#41; || &#40;w&#91;j&#93; &lt; w&#91;j+1&#93;&#41;&#41; 
&#123; 
j= j+1; 
&#125; 

&#125; 
if &#40;x&lt;w&#91;j&#93;&#41; 
&#123; 
w&#91;i&#93;= w&#91;j&#93;; 
i= j; 
j= 2 * i; 
&#125; 
w&#91;i&#93;= x; 

//Ordenando o vetor 
while &#40;dir&gt;1&#41; 
&#123; 
x=w&#91;1&#93;; 
w&#91;1&#93;=w&#91;dir&#93;; 
w&#91;dir&#93;=x; 
dir=dir -1; 

//Montando um novo heap 
i=esq; 
j=2 * i; 
x=w&#91;i&#93;; 
&#125; 




while &#40;&#40;j &lt;= dir&#41; || &#40;x&lt; w&#91;j&#93;&#41;&#41; 
&#123; 
if &#40;&#40;j &lt; dir&#41; || &#40;w&#91;j&#93;&lt;w&#91;j+1&#93;&#41;&#41; 
&#123; 
j= j+1; 
&#125; 
if &#40;x &lt; w&#91;j&#93;&#41; 
&#123; 
w&#91;i&#93;=w&#91;j&#93;; 
i=j; 
j=2 * i; 
&#125; 
w&#91;i&#93;=x; 

&#125; 

&#125; 
&#125;
J

Tudo bem?

Nosso colega Neto já mostrou como instânciar um vetor de 6 posições.

Não é necessário vc implementar um método de ordenação. Vc pode declarar esse vetor com um Array (Classe disponível em java.util.Arrays) e este já contém métodos de ordenação.

Caso queira realmente implementar um método de ordenação, primeiro entenda os métodos existentes e como implementa-los. Existem livros dedicados a métodos de ordenação.

:o

“javanes”:
Alguem pode me ajudar nesse algoritmo,
Existe alguma coisa de errado, nao consigo achar…

Agradeço quem puder me ajudar…

Segue algoritmo HeapSort abaixo.

public class  AlgoritmoHeap

{

public static void main(String[] args)

{
int w[]=new int[6]; //Declaracao do Vetor de 6 posicoes
	w[1]=9;
	w[2]=8;
	w[3]=3;
	w[4]=5;
	w[5]=6;
	w[6]=7;

	int n=6;
	int dir=0;
	int esq=0;
	int i=0;
	int x=0;
	int j=0;

		 //Montando o primeiro heap
		esq = (n/2) +1;
		dir=n;
		
		while (esq&gt;1)
		{
			esq=esq-1;
	        i=esq;
	        j=2*i;
	        x=w[i];
		}


				while (j&lt;=dir) || (x&lt;w[j])
				{
					if ((j &lt; dir) || (w[j] &lt; w[j+1]))
					{
						j= j+1;
					}

				}
					if (x&lt;w[j])
					{
							w[i]= w[j];
							i= j;
							j= 2 * i;
					}
					      w[i]= x;

			//Ordenando o vetor
			while (dir&gt;1)
				{
				x=w[1];
			   w[1]=w[dir];
				w[dir]=x;
				dir=dir -1;
		
		//Montando um novo heap
		i=esq;
		j=2 * i;
		x=w[i];

}

while ((j <= dir) || (x< w[j]))

{

if ((j < dir) || (w[j]<w[j+1]))

{

j= j+1;

}

if (x < w[j])

{

w[i]=w[j];

i=j;

j=2 * i;

}

w[i]=x;

}

}

}

eltonk

Um livro muito bom, e que traz vários métodos de ordenação bem detalhados e fáceis de entender é o Livro “Algoritmos” do Salvetti.
E se você quiser ir mais a fundo, exite o livro “Complexidade de Algoritmos” do Toscani, que traz análises de complexidade (duh), custo computacional, etc…

Dois livros muito bons :wink:

[ ] 's

Criado 6 de novembro de 2003
Ultima resposta 26 de nov. de 2003
Respostas 3
Participantes 4