//問: 若是有100個燈,走一次就關閉本身的倍數的燈, 而後+1 從新走 再次按倍數的關燈 到100個燈的時候這個燈是亮的仍是關閉的 //答: 與本身走過的次數取模成功 而後累加取模成功的數量,再次與2取模若是成功那麼就是亮的不然就是關閉的 function light($num) { $a = 1; for ($i=1; $i <= $num; $i++) { echo '<div style="width:20px;height:20px;background-color:#faa2f2;float:left;margin-left:10px"></div>'; } echo '<br /><hr />'; //$color = array('#f2f2f2','#a2a2a2'); for ($z=1; $z <= $num; $z++) { for ($x=1; $x <= $z; $x++) { if ($z%$x == 0) { @$sum[$z] += 1; } //echo '<div style="width:20px;height:20px;background-color:#000;float:left;margin-left:10px"></div>'; } for ($j=$z; $j <= $num; $j++) { if($j%$z == 0){ $color = '#f2f2f2'; }else{ $color = '#faa2f2'; } //echo '<div style="width:20px;height:20px;background-color:'.$color.';float:left;margin-left:10px">'.$j.'</div>'; } if($sum[$z]%2 == 0){ //echo '第'.$z.'次亮的'; $last = '第'.$z.'次亮的'; }else{ $last = '第'.$z.'次不亮的'; } //echo '<br /><br />'; } echo $last; } light(16); //求第十六次燈是否亮的
冒泡排序算法
php
//由小往大排序 冒泡 public function bubble_sort($arr) { $n=count($arr); for($i=0;$i<$n-1;$i++){ for($j=$i+1;$j<$n;$j++) { if($arr[$j]<$arr[$i]) { $temp=$arr[$i]; $arr[$i]=$arr[$j]; $arr[$j]=$temp; } } } return $arr; } 環境 WampServer Version 2.5 框架 onethink1 # 3000 數據 字段 uid,nickname 用時 1.492003267 # 6000 數據 用時 5.957014533 4.9290100 # 9000 數據 用時 13.890031832 只有一個字段 11.3481670
快速排序法算法
function quick_sort($arr) { $n=count($arr); if($n<=1) return $arr; $key=$arr[0]; $left_arr=array(); $right_arr=array(); for($i=1;$i<$n;$i++) { if($arr[$i]<=$key) $left_arr[]=$arr[$i]; else $right_arr[]=$arr[$i]; } $left_arr=quick_sort($left_arr); $right_arr=quick_sort($right_arr); return array_merge($left_arr,array($key),$right_arr); } 在 WampServer Version 2.5 環境中 ini_set('xdebug.max_nesting_level', 2000); #遞歸次數設置在 2000次,但實際上只到400多點 , 再多就會被限制 測試在 300條數據運行時間爲 0.02600128 s
關於遞歸: 邏輯上的遞歸能夠無次數限制, 但語言執行器或者程序堆棧會限制遞歸的次數.框架
插入排序 維基百科測試
public function insertSort($arr) { $n=count($arr); for($i=1;$i<$n;$i++) { $tmp=$arr[$i]; $j=$i-1; while($arr[$j]>$tmp) { $arr[$j+1]=$arr[$j]; $arr[$j]=$tmp; $j--; if($j<0) break; } } return $arr; } 算法思路 1.從第一個元素開始,該元素能夠認爲已經被排序 2.取出下一個元素,在已經排序的元素序列中從後向前掃描 3.若是該元素(已排序)大於新元素,將該元素移到下一位置 4.重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 5.將新元素插入到該位置後 重複步驟2~5 #實驗結果 與冒泡與快速排序相比 一樣環境中 一樣數據 9000條 冒泡耗時: 13s 插入耗時: <1s