Ir ao conteúdo

Problemas com ordenação de arrays em PHP


eduardopilati

Posts recomendados

Postado

olá, sou novo em PHP e resolvi fazer uma função que ordena todos os numeros de um array em ordem crescente como ele funciona:

tenho um vetor (15, 32, 12, 68, 1) ele percorre o vetor inteiro ate achar o maior. quarda o indice do maior e substitui com o ultimo.

ficaria mais ou menos assim (em passos)

1 - (15, 32, 12, 68, 1)

2 - (15, 32, 12, 1, 68)

3 - (15, 1, 12, 32, 68)

4 - (12, 1, 15, 32, 68)

5 - (1, 12, 15, 32, 68)

 

mas quando executo o meu codio um indice fica fora de lugar (pelo meu código o indice 13)

meu codigo:

<?php    $vetor = array(15,16,12,48,96,13,48,16,54,58,26,35,78,91,12,48,63,75);    var_dump( $vetor ); // mostra todo vetor        $max = sizeof( $vetor ) -1; // atribui para max o tamanho do vetor -1    $maior = $nodo_maior = $percorre = $aux = 0;        echo '<p />';        while( $max > 0) // percorre todo o vetor diminuindo as possibilidades    {        $percorre = $maior = 0;        while ( $percorre < $max ) // acha o maior        {            if ( $vetor[$percorre] > $maior )            {                $maior = $vetor[$percorre];                $nodo_maior = $percorre;            }            $percorre++;        }        $aux = $vetor[$max]; // troca o maior com o ultimo indice        $vetor[$max] = $maior;        $vetor[$nodo_maior] = $aux;        $max--;    }    var_dump($vetor);?> 

resultado:

array(18) { [0]=> int(15) [1]=> int(16) [2]=> int(12) [3]=> int(48) [4]=> int(96) [5]=> int(13) [6]=> int(48) [7]=> int(16) [8]=> int(54) [9]=> int(58) [10]=> int(26) [11]=> int(35) [12]=> int(78) [13]=> int(91) [14]=> int(12) [15]=> int(48) [16]=> int(63) [17]=> int(75) }array(18) { [0]=> int(12) [1]=> int(12) [2]=> int(13) [3]=> int(15) [4]=> int(16) [5]=> int(16) [6]=> int(26) [7]=> int(35) [8]=> int(48) [9]=> int(48) [10]=> int(48) [11]=> int(54) [12]=> int(63) [13]=> int(58) [14]=> int(75) [15]=> int(78) [16]=> int(91) [17]=> int(96) }
  • Moderador
Postado

Olá,

 

Que mal lhe pergunte...  porque reinventar a roda? Você não precisa passar trabalho criando uma função que já existe no php.  a função sort()

$vetor = array(15,16,12,48,96,13,48,16,54,58,26,35,78,91,12,48,63,75);sort($vetor);echo "Array Ordenado = {";foreach ($vetor as $chave => $valor) {	echo $valor . ", ";}echo " }";
Postado

@eduardopilati

 

 

A sua lógica está correta com relação a ordenação do array. O problema ali é que você troca os elementos do array independentemente de ter havido necessidade para tal. Ou seja, você acaba jogando lixo aleatoriamente em determinadas posições do array. Outra questão é que você assume um valor padrão único (zero) para comparar com os elementos do array. Você precisa fazer a comparação entre os elementos do array.

 

As modificações abaixo resolvem isso. Note que escolhi sempre o último elemento a ser comparado (e não mais o zero fixo). Havendo necessidade de troca dos elementos, uma flag será setada e, após a saída do laço, a troca será então realizada.

 

 

Teste aí..

<?php    $vetor = array(15,16,12,48,96,13,48,16,54,58,26,35,78,91,12,48,63,75);        var_dump( $vetor ); // mostra todo vetor        $max = sizeof( $vetor ) - 1; // atribui para max o tamanho do vetor -1        echo '<p />';    while( $max > 0) // percorre todo o vetor diminuindo as possibilidades    {        $percorre = 0;        $found = false;        $maior = $vetor[$max];        while ( $percorre < $max ) // acha o maior        {            if ( $vetor[$percorre] > $maior )            {                $maior = $vetor[$percorre];                $nodo_maior = $percorre;                $found = true;            }            $percorre++;        }        if ($found) {           	$aux = $vetor[$max]; // troca o maior com o ultimo indice        	$vetor[$max] = $maior;        	$vetor[$nodo_maior] = $aux;        }        $max--;    }    var_dump($vetor);?>

LNW

Arquivado

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

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!