Ir para conteúdo

POWERED BY:

Arquivado

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

AprendizPHP

Ordenação de dados

Recommended Posts

Olá pessoal,

 

Estou fazendo uma ordenação de dados usando o bubble sort, minha dúvida é:

Como exibir o número de comparações e trocas de dados.

 

 


       /*
           Esta função troca o valor de duas variáveis entre si.
           Opcional. Pode ser embutido na bolha
       */
       function swap(&$valor_1, &$valor_2) {
           list($valor_1, $valor_2) = array($valor_2, $valor_1);
       }

       /* Array de teste */
       $arrToSort = array(1, 4, 7, 3, 8, 9, 10);
       $length = count($arrToSort);
       /* a BOLHA! ;-) */
       for ($i = 0; $i < $length; $i++) {
           for ($j = $i; $j < count($arrToSort); $j++) {
               if ($arrToSort[$i] > $arrToSort[$j]) {
                   swap($arrToSort[$i], $arrToSort[$j]);
               }
           }
       }

       /* Opcional. Exibe o array de um jeito que nós podemos entender! */
   echo "<pre>";print_r($arrToSort);echo "</pre>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

/*
           Esta função troca o valor de duas variáveis entre si.
           Opcional. Pode ser embutido na bolha
       */
       function swap(&$valor_1, &$valor_2) {
           static $conta = 0;
           list($valor_1, $valor_2) = array($valor_2, $valor_1);
           $conta++;
           return $conta;
       }

       $conta = 0;
       /* Array de teste */
       $arrToSort = array(1, 4, 7, 3, 8, 9, 10);
       $length = count($arrToSort);
       /* a BOLHA! ;-) */
       for ($i = 0; $i < $length; $i++) {
           for ($j = $i; $j < count($arrToSort); $j++) {
               if ($arrToSort[$i] > $arrToSort[$j]) {
                   $conta = swap($arrToSort[$i], $arrToSort[$j]);
               }
           }
       }

       /* Opcional. Exibe o array de um jeito que nós podemos entender! */
   echo "<pre>";print_r($arrToSort);echo "</pre>";
   echo "<pre>Total de trocas: {$conta}</pre>";

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Henrique Barcelos,

 

Realmente obrigado, era isso mesmo!.

 

Tentei aplicar em outro método de busca, mas ele retorna sempre zero, as trocas e as comparações, onde posso estar errando?

 

 

<?php

function selection_sort(&$arr) {
  static $troca = 0;
  $n = count($arr);
  for($i = 0; $i < count($arr); $i++) {
     $min = $i;
     for($j = $i + 1; $j < $n; $j++)
        if($arr[$j] < $arr[$min]){
           $min = $j;
        }
       $comp++;
     $tmp = $arr[$min];
     $arr[$min] = $arr[$i];
     $arr[$i] = $tmp;
  }
  $troca++;
  return $troca;
}

$comp = 0;
$troca = 0;
$arr = array(23,7,8,15,9,12,17);

selection_sort($arr);
echo "<pre>";print_r($arr);echo "</pre>";
echo "<pre>Total de comparações: {$comp} </pre>";
echo "<pre>Total de trocas: {$troca}</pre>";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Embora eu não goste muito de variáveis globais, assim funciona:

function selection_sort(&$arr) {
  global $conta;
  static $troca = 0;
  $n = count($arr);
  for($i = 0; $i < count($arr); $i++) {
     $min = $i;
     for($j = $i + 1; $j < $n; $j++)
        if($arr[$j] < $arr[$min]){
           $min = $j;
        }
       $comp++;
     $tmp = $arr[$min];
     $arr[$min] = $arr[$i];
     $arr[$i] = $tmp;
  }
  $troca++;
  return $troca;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

$comp = 0;
$arr = array(23,7,8,15,9,12,17);

function selection_sort(&$arr) {
  global $comp;
  static $troca = 0;
  $n = count($arr);
  for($i = 0; $i < count($arr); $i++) {
     $min = $i;
     for($j = $i + 1; $j < $n; $j++)
        if($arr[$j] < $arr[$min]){
           $min = $j;
        }
       $comp++;
     $tmp = $arr[$min];
     $arr[$min] = $arr[$i];
     $arr[$i] = $tmp;
  }
  $troca++;
  return $troca;
}

$troca = selection_sort($arr);
echo "<pre>";print_r($arr);echo "</pre>";
echo "<pre>Total de comparações: {$comp} </pre>";
echo "<pre>Total de trocas: {$troca}</pre>";

 

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.