排序算法_已遷移

//問: 若是有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
相關文章
相關標籤/搜索