我需要在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)
$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";
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)
| 归档时间: |
|
| 查看次数: |
58779 次 |
| 最近记录: |