PHP中的冒泡排序实现?

niv*_*nka 13 php bubble-sort

我需要在PHP中进行冒泡排序算法.

我想知道是否有任何一个我可以使用的好例子,或者是一个可以做到这一点的开源库.

我在一个集合(数组)中有一些空格,我想用对象(一个人)填充这些空间,所以没有空间可以有男性和女性,这就是为什么我试图找出一个冒泡排序算法.

我的计划是填写任何可用的空间,无论性别如何,然后分别对它们进行排序.

谢谢.

Jac*_*rky 27

function bubble_sort($arr) {
    $size = count($arr)-1;
    for ($i=0; $i<$size; $i++) {
        for ($j=0; $j<$size-$i; $j++) {
            $k = $j+1;
            if ($arr[$k] < $arr[$j]) {
                // Swap elements at indices: $j, $k
                list($arr[$j], $arr[$k]) = array($arr[$k], $arr[$j]);
            }
        }
    }
    return $arr;
}
Run Code Online (Sandbox Code Playgroud)

例如:

$arr = array(1,3,2,8,5,7,4,0);

print("Before sorting");
print_r($arr);

$arr = bubble_sort($arr);
print("After sorting by using bubble sort");
print_r($arr);
Run Code Online (Sandbox Code Playgroud)


Rif*_*fat 22

使用冒泡排序是一个非常糟糕的主意.它有复杂性O(n^2).

你应该使用php usort,它实际上是一个合并排序实现并保证O(n*log(n))复杂性.

PHP手册中的示例代码 -

function cmp( $a, $b ) { 
  if(  $a->weight ==  $b->weight ){ return 0 ; } 
  return ($a->weight < $b->weight) ? -1 : 1;
} 

usort($unsortedObjectArray,'cmp');
Run Code Online (Sandbox Code Playgroud)


Sud*_*oti 7


$numbers = array(1,3,2,5,2);
$array_size = count($numbers);

echo "Numbers before sort: ";
for ( $i = 0; $i < $array_size; $i++ )
   echo $numbers[$i];
echo "n";

for ( $i = 0; $i < $array_size; $i++ )
{
   for ($j = 0; $j < $array_size; $j++ )
   {
      if ($numbers[$i] < $numbers[$j])
      {
         $temp = $numbers[$i];
         $numbers[$i] = $numbers[$j];
         $numbers[$j] = $temp;
      }
   }
}

echo "Numbers after sort: ";
for( $i = 0; $i < $array_size; $i++ )
   echo $numbers[$i];
echo "n";


Kur*_*ong 6

function bubble_sort($arr) {
    $n = count($arr);
    do {
        $swapped = false;
        for ($i = 0; $i < $n - 1; $i++) {
            // swap when out of order
            if ($arr[$i] > $arr[$i + 1]) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$i + 1];
                $arr[$i + 1] = $temp;
                $swapped = true;
            }
        }
        $n--;
    }
    while ($swapped);
    return $arr;
}
Run Code Online (Sandbox Code Playgroud)

  • 嘿,谢谢你。我知道你没有赢,但这正是我正在寻找的逻辑! (2认同)