2008年8月7日 星期四

merge

merge的解法
1.將要merge的兩個陣列進行排序
2.將陣列a及陣列b的每個元素進行比較
3.比較後將元素放入另一個陣列c
4.如果陣列a或陣列b已經沒有元素可以進行比較,將還沒比較的元素加到陣列c的後面


public function mergeAction(){
$this->_helper->viewRenderer->setNoRender();

/**
* 製做陣列a
*/
$length_a=rand(8,10);

for($i=0;$i<$length_a;$i++)
$a[]=rand(100,200);

/**
* 將陣列a進行排序
*/
$a=$this->sort($a);


/**
* 製做陣列b
*/
$length_b=rand(11,13);

for($i=0;$i<$length_b;$i++)
$b[]=rand(100,200);

/**
* 將陣列b進行排序
*/
$b=$this->sort($b);

/**
* 將陣列a及陣列b,merge為單一陣列
*/
$com_a=0;
$com_b=0;
while($com_a<$length_a && $com_b<$length_b){
if($a[$com_a]<$b[$com_b]){
$c[]=$a[$com_a];
$com_a++;
}else{
$c[]=$b[$com_b];
$com_b++;
}
}

while($com_a<$length_a){
$c[]=$a[$com_a];
$com_a++;
}

while($com_b<$length_b){
$c[]=$b[$com_b];
$com_b++;
}


/**
* a陣列
*/
foreach($a as $num)
echo $num."
\n";

echo "


";

/**
* b陣列
*/
foreach($b as $num)
echo $num."
\n";

echo "


";

/**
* merge陣列a及陣列b後的c陣列
*/
foreach($c as $num)
echo $num."
\n";

}

public function sort(array $a){
$left=0;
$right=sizeof($a)-1;

while($left<$right){
$shift=0;
for($i=$left;$i<$right;$i++){
if($a[$i]>$a[$i+1]){
$tmp=$a[$i];
$a[$i]=$a[$i+1];
$a[$i+1]=$tmp;
$shift=$i;
}
}
$right=$shift;

for($i=$right;$i>$left;$i--){
if($a[$i]<$a[$i-1]){
$tmp=$a[$i];
$a[$i]=$a[$i-1];
$a[$i-1]=$tmp;
$shift=$i;
}
}
$left=$shift;
}
return $a;
}

沒有留言: