2014-10-02 60 views
-1

我有這個氣泡排序功能,我想添加一個計數器到交換功能。所以基本上,我想知道它有多少次交換數組中的數字,以便從低到高排序。添加一個計數器功能

<?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); 

?> 

我試着在swap函數中添加一個counter ++,但是這給了我錯誤。

+0

提示#1:IIFE和閉合 – zerkms 2014-10-02 11:20:56

回答

0

對於尚未初始化的變量,您無法做counter ++。在調用交換功能之前,它需要設置爲0。您也可以每次將$ count傳遞給函數或使用全局變量。

0

我創建了一個小班,是你在找什麼?

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