Разминка для мозга: Ручная сортировка массивов пузырьком на php.

29.05.2017

Набросок простого алгоритма для сортировки элементов массива.

1_array.php (Download)

 <?php
  $a = array();

  $a[] = 10;
  $a[] = 1;
  $a[] = 5;
  $a[] = -1;
  $a[] = 40;
  $a[] = 30;
  $a[] = 3;

  echo '<pre>';
    print_r($a);
  echo '</pre><hr/>';

  $iLen = count($a);
  for ($i=0; $i<$iLen; $i++)
  {
    $iMin = $a[$i];
    $iMinPos = $i;

    for ($j=$i; $j<$iLen; $j++)
    {
      if ($a[$j] < $iMin)
      {
        $iMin = $a[$j];
        $iMinPos = $j;
      }
    }

    if ($iMinPos != $i)
    {
      $iTMP = $a[$i];
      $a[$i] = $a[$iMinPos];
      $a[$iMinPos] = $iTMP;
    }
  }

  echo '<pre>';
    print_r($a);
  echo '</pre>';
?>

2_array.php (Download)

 <?php

  /**
   * Меняет местами 2а элемента массива
   *
   * @param array $a Массив
   * @param int $x1 Координатв 1го элемента
   * @param int $y1

   * @param int $x2 Координатв 2го элемента
   * @param int $y2 ...

   * @return array
   */
  function swap($a, $x1, $y1, $x2, $y2)
  {
    $iTmp = $a[$x1][$y1];
    $a[$x1][$y1] = $a[$x2][$y2];
    $a[$x2][$y2] = $iTmp;

    return $a;
  }

  $iCol = 2;
  $iRow = 3;

  $a = array();
  for ($i=0; $i<$iCol; $i++)
  {
    for ($j=0; $j<$iRow; $j++)
    {
      $a[$i][$j] = rand(-10, 10);
    }
  }

  echo '<pre>';
    print_r($a);
  echo '</pre><hr/>';

  for ($i=0; $i<count($a); $i++)
  {
    for ($j=0; $j<count($a[$i]); $j++)
    {

      $iMinVal = $a[$i][$j];
      $iMinPosX = $i;
      $iMinPosY = $j;
      for ($n=$i; $n<count($a); $n++)      // 0?
      {
        for ($m=0; $m<count($a[$n]); $m++)  // 0?
        {
//          echo $iMinVal.'<br>';
          if ($a[$n][$m] < $iMinVal)
          {
            $iMinVal = $a[$n][$m];
            $iMinPosX = $n;
            $iMinPosY = $m;
          }
        }
      }

      if ( ($iMinPosX != $i) OR ($iMinPosY != $j) )
      {
        $a = swap($a, $i, $j, $iMinPosX, $iMinPosY);
      }

    }
  }

  echo '<pre>';
    print_r($a);
  echo '</pre>';
?>


Категории: PHP, Алгоритмы
Пометки: Из старых тестов. array sort пузырьком
Яндекс.Метрика