向函数添加计数器


Add a counter to a function

我有一个bubble排序函数,我想在交换函数中添加一个计数器。所以基本上,我想知道它在数组中交换了多少次数字,以从低到高进行排序。

<?php
function bubble_sort($arr) {
$size = count($arr);
for ($i=0; $i<$size; $i++) {
    for ($j=0; $j<$size-1-$i; $j++) {
        if ($arr[$j+1] < $arr[$j]) {
            swap($arr, $j, $j+1);
        }
    }
}
return $arr;
}
function swap(&$arr, $a, $b){
$tmp = $arr[$a];
$arr[$a] = $arr[$b];
$arr[$b] = $tmp;
}

$arr = array(81,4,12,-1,99,100,-10);
echo("Voor bubble sort<br>");
print_r($arr);
$arr = bubble_sort($arr);
echo("<br>Na bubble sort<br>");
print_r($arr);
?>

我试着在交换函数中添加一个计数器++,但这给我带来了错误。

不能对尚未初始化的变量执行counter++操作。在调用交换函数之前,需要将其设置为0。您还可以每次将$count传递给函数或使用全局变量。

我创建了一个小类,这就是你想要的吗?

class bubble {
    public $counter = array();
    public $arr = null;
    public function __construct($arr){
        $this->arr = $arr;
    }
    public function sort(){
        $size = count($this->arr);
        for ($i=0; $i<$size; $i++) {
            for ($j=0; $j<$size-1-$i; $j++) {
                if ($this->arr[$j+1] < $this->arr[$j]) {
                    $this->swap($this->arr, $j, $j+1);
                }
            }
        }
    }
    function swap(&$arr, $a, $b){
        $tmp = $arr[$a];
        $this->arr[$a] = $arr[$b];
        $this->arr[$b] = $tmp;
        $this->counter[$a]++;
    }
}
$arr = array(81,4,12,-1,99,100,-10);
$bubble = new bubble($arr);
echo("Voor bubble sort<br>");
print_r($bubble->arr);
$bubble->sort();
echo("<br>Na bubble sort<br>");
print_r($bubble->arr);
echo("<br>Swap counter (by key)<br>");
print_r($bubble->counter);

演示:https://eval.in/201077