Ir ao conteúdo
  • Cadastre-se

PHP Ordenação por seleção não está em ordem


Posts recomendados

Estou tentando entender na forma de código a 'ordenação por seleção',em que processa 2 arrays, capturando o menor número e inserindo em outro array e assim sucessivamente até o fim. O código funciona com números com o intervalo de 2 em 2:

  $vetor1=['1','3','5','7','9'];

  $vetor2=['2','4','6','8','10'];

 

Mas quando em sequencia ou um certo intervalo entre ou outro, alguns números podem se repetir ou não ficar na ordem certa. Um exemplo abaixo, a exibição não aparece na ordem correta:

 

    $vetor1=['1','2','3','4','5'];

    $vetor2=['6','7','8','9','10'];

 

Aqui outro exemplo em que o desejado é um array de 10 indices, mas retorna chaves a mais.

   $vetor1=['13','21','31','42','5332'];

   $vetor2=['6','7','8','9','1012'];

 

Esse é o código que conseguir até o momento.

 

$cont3=0;
  for($cont1=0; $cont1<5; $cont1++){
    if($vetor1[$cont1] < $vetor2[$cont1]){
      $vetor3[$cont3]= $vetor1[$cont1];
      $cont3 = $cont3 + 1;
      $vetor3[$cont3] = $vetor2[$cont1];
      $cont3 = $cont3 + 1;
    }
    if($vetor1[$cont1] > $vetor2[$cont1]){
      $vetor3[$cont3]= $vetor2[$cont1];
      $cont3 = $cont3 + 1;

      for($cont2=$cont1+1;$cont2<5;$cont2++){
        if($vetor2[$cont2] < $vetor1[$cont1]){
          $vetor3[$cont3] = $vetor2[$cont2];
          $cont3 = $cont3 + 1;
        }
      }
      $vetor3[$cont3] = $vetor1[$cont1];
      $cont3 = $cont3 + 1;
    }
  }

Gostaria de uma orientação do que poderia está causando isso.

Link para o comentário
Compartilhar em outros sites

@Medivh Bom amigo, seu código não está muito claro para que possa ser avaliado, eu recomendo que você tente organizar ele pra você ter uma visão mais clara dele!

 

Vamos tentar endenter o seu código agora!

<?php

$vetor1 = ['3','1','5','7','9']; // Vetor 1
$vetor2 = ['2','4','6','8','10']; // Vetor 2

$vetor3 = []; // Vetor 3

$cont3 = 0;

for ($cont1 = 0; $cont1 < 5; $cont1++)
{
	if ($vetor1[$cont1] < $vetor2[$cont1])
	{
		$vetor3[$cont3] = $vetor1[$cont1]; 
		$cont3 = $cont3 + 1;
		$vetor3[$cont3] = $vetor2[$cont1];
		$cont3 = $cont3 + 1;
	}
	
	if ($vetor1[$cont1] > $vetor2[$cont1])
	{
		$vetor3[$cont3] = $vetor2[$cont1];
		$cont3 = $cont3 + 1;

		for ($cont2 = $cont1 + 1; $cont2 < 5; $cont2++)
		{
			if ($vetor2[$cont2] < $vetor1[$cont1])
			{
				$vetor3[$cont3] = $vetor2[$cont2];
				$cont3 = $cont3 + 1;
			}
		}
      
		$vetor3[$cont3] = $vetor1[$cont1];
		$cont3 = $cont3 + 1;
	}
}

print_r($vetor3);

Nesse exemplo eu mudei a ordem do primeiro e segundo indece do vetor 1 para fazer o teste.

// Resultado [2, 3, 1, 4, 5, 6, 7, 8, 9, 10];

 

Bom pelo que eu entendi, você quer organizar os dois vetores em um unico vetor com os valores dele em ordem crescente.

 

Em 01/04/2020 às 08:11, Medivh disse:

O código funciona com números com o intervalo de 2 em 2:

 

Bom pelo resultado ele não está funcionando mesmo com os valores em intervalo de 2.

 

Em 01/04/2020 às 08:11, Medivh disse:

Gostaria de uma orientação do que poderia está causando isso.

 

Nesse caso é a métodologia que você está tentando aplicar

 

Eu recomendo uma abordagem diferente, ao invés de você tentar adicionar e organizar os valores no vetor 3, você poderia adicionar primeiro todos os valores no vetor 3 e depois organizar nele os valores na ordem que você quiser.

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...