Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marciocorbolan

Problemas com booble sort! !

Recommended Posts

Gente, to me matando aqui e nao to conseguindo fazer isso funciona ://

A parada é o seguinte, estou tentando fazer uma busca no vertor de 60 posições e mostrar as seis posições que contenham o maiores valores, porem em ordem decrescente, então fiz um "booble sort" mas esta dando erro, se possivel eu gostaria que alguem me ajudase.

 

for($i=1;$i<60;++$i){	for($j=$i+1;$j<61;++$j)	{		if($num[$i]>$n1)		{			$t1=$n1;			$n1=$i;		//O PRIMEIRO MAIOR NUMERO RECEBE O NOVO PRIMEIRO MAIOR NUMERO			$t2=$n2;			$n2=$t1;		//O SEGUNDO MAIOR NUMERO RECEBE O NUMERO QUE ESTAVA NO PRIMEIRO						$t3=$n3;			$n3=$t2;		//O TERCEIRO MAIOR NUMERO RECEBE O NUMERO QUE ESTAVA NO SEGUNDO								$t4=$n4;			$n4=$t3;		//O QUARTO MAIOR NUMERO RECEBE O NUMERO QUE ESTAVA NO TERCEIRO								$t5=$n5;			$n5=$t4;		//O QUINTO MAIOR NUMERO RECEBE O NUMERO QUE ESTAVA NO QUARTO							$n6=$t5;		//O SEXTO MAIOR NUMERO RECEBE O NUMERO QUE ESTAVA NO QUINTO		}	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha uma outra maneira de fazer isso, seria assim:

//Bolha for ($i = 0; $i < count($seuArray); $i++) {            for ($j = $i; $j < count($seuArray); $j++) {                if ($seuArray[$i] > $seuArray[$j]) {                                  $aux = $seuArray[$i];               $seuArray[$i] =  $seuArray[$j];               $seuArray[$j] = $aux;                }            }        }

Assim você ordena seu vetor inteiro e pode exibir quantos valores quiser fazendo um "for" que vai do inicio do vetor até a posição que você quer. É uma maneira genérica para que você não tenha que ficar criando várias variáveis...flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha uma outra maneira de fazer isso, seria assim:

//Bolha for ($i = 0; $i < count($seuArray); $i++) {            for ($j = $i; $j < count($seuArray); $j++) {                if ($seuArray[$i] > $seuArray[$j]) {                                  $aux = $seuArray[$i];               $seuArray[$i] =  $seuArray[$j];               $seuArray[$j] = $aux;                }            }        }
Assim você ordena seu vetor inteiro e pode exibir quantos valores quiser fazendo um "for" que vai do inicio do vetor até a posição que você quer. É uma maneira genérica para que você não tenha que ficar criando várias variáveis...flws
Amigo, primeiro obrigado pela atenção, mas eu não quero organizar o vetor não, ele tem que continuar do mesmo jeito, porem eu quero informar os 6 maiores numero dentro dele em ordem decrescente! Entendeu meu problema?! Caso possa me ajudar eu agradeço :)vlw a atenção ae!t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah sim, agora eu entendi. Eu me lembro de 2 alternativas. Uma delas, aproveitando o que falei acima sobre o metodo da bolha, é pode copiar o seu vetor em outro e ordenar o vetor copiado para obter os 6 maiores.Outra maneira, mais complicada de explicar é fazendo o seguinte. Faça um vetor com os 6 maiores elementos. Para cada elemento do vetor principal você percorre esse vetor dos 6 maiores, se você achar alguem no vetor dos 6 maiores menor do que o elemento que você está verificando, você deve colocar nesta posição este elemento e mover todos os outros elementos uma posição para baixo (o elemento da posição 6 some).No algoritmo que você fez, me parece que você só trata o caso do elemento ser o maior dos maiores, mas você pode achar por exemplo um elemento que é o quarto maior, onde você deve modificar apenas as posições 4, 5 e 6.Deu pra intende +- a lógica? Qualquer duvida pra construi o algoritmo vai falanu q eu ajudo.Se tem outras maneiras eu realmente não lembro agora.flws

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poww.. foi mal, sumi por causa das festas e tudo mais!!

Ai gente tentei fazer algo mas não deu muito certo não, ele gravou o mesmo valor para todos :/

 

for($i=0;$i<count($num);$i++){	for($j=$i;$j<count($num);$j++)	{		if($maior[$i]<$num[$j])		{			$aux=$maior[$i];			$maior[$i]=$j;			$maior[$i+1]=$aux;		}	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.