第一篇:【黑馬程序員】php四種基礎(chǔ)算法:冒泡,選擇,插入和快速...
【黑馬程序員】php四種基礎(chǔ)算法:冒泡,選擇,插入和快
速...許多人都說(shuō) 算法是程序的核心,一個(gè)程序的好于差,關(guān)鍵是這個(gè)程序算法的優(yōu)劣。作為一個(gè)初級(jí)phper,雖然很少接觸到算法方面的東西。但是對(duì)于冒泡排序,插入排序,選擇排序,快速排序四種基本算法,我想還是要掌握的。下面是我按自己的理解,將四個(gè)方法分析一遍。
需求:分別用 冒泡排序法,快速排序法,選擇排序法,插入排序法將下面數(shù)組中 的值按照從小到的順序進(jìn)行排序。
$arr(1,43,54,62,21,66,32,78,36,76,39);1.冒泡排序法
* 思路分析:法如其名,就是像冒泡一樣,每次從數(shù)組當(dāng)中 冒一個(gè)最大的數(shù)出來(lái)。* 比如:2,4,1 // 第一次 冒出的泡是4 *
2,1,4 // 第二次 冒出的泡是 2 *
1,2,4 // 最后就變成這樣
01 $arr=array(1,43,54,62,21,66,32,78,36,76,39);02 function getpao($arr)03 { 04 $len=count($arr);05 //設(shè)置一個(gè)空數(shù)組 用來(lái)接收冒出來(lái)的泡 06 //該層循環(huán)控制 需要冒泡的輪數(shù) 07 for($i=1;$i<$len;$i++)08 { //該層循環(huán)用來(lái)控制每輪 冒出一個(gè)數(shù) 需要比較的次數(shù) 09 for($k=0;$k<$len-$i;$k++)10 { 11 if($arr[$k]>$arr[$k+1])12 { 13 $tmp=$arr[$k+1];14 $arr[$k+1]=$arr[$k];15 $arr[$k]=$tmp;16 }
黑馬程序員濟(jì)南中心 編著 } 18 } 19 return $arr;20 }
2.選擇排序法:
選擇排序法思路: 每次選擇一個(gè)相應(yīng)的元素,然后將其放到指定的位置
01 function select_sort($arr){ 02 //實(shí)現(xiàn)思路 雙重循環(huán)完成,外層控制輪數(shù),當(dāng)前的最小值。內(nèi)層 控制的比較次數(shù) 03 //$i 當(dāng)前最小值的位置,需要參與比較的元素 04 for($i=0, $len=count($arr);$i<$len-1;$i++){ 05 //先假設(shè)最小的值的位置 06 $p = $i;07 //$j 當(dāng)前都需要和哪些元素比較,$i 后邊的。08 for($j=$i+1;$j<$len;$j++){ 09 //$arr[$p] 是 當(dāng)前已知的最小值 10 if($arr[$p] > $arr[$j]){ 11 //比較,發(fā)現(xiàn)更小的,記錄下最小值的位置;并且在下次比較時(shí),12 // 應(yīng)該采用已知的最小值進(jìn)行比較。13 $p = $j;14 } 15 } 16 //已經(jīng)確定了當(dāng)前的最小值的位置,保存到$p中。//如果發(fā)現(xiàn) 最小值的位置與當(dāng)前假設(shè)的位置$i不同,則位置互換即可 18 if($p!= $i){ 19 $tmp = $arr[$p];20 $arr[$p] = $arr[$i];21 $arr[$i] = $tmp;22 } 23 } 24 //返回最終結(jié)果 25 return $arr;26 }
3.插入排序法
黑馬程序員濟(jì)南中心 編著
插入排序法思路:將要排序的元素插入到已經(jīng) 假定排序號(hào)的數(shù)組的指定位置。
01 function insert_sort($arr){ 02 //區(qū)分 哪部分是已經(jīng)排序好的 03 //哪部分是沒(méi)有排序的 04 //找到其中一個(gè)需要排序的元素
05 //這個(gè)元素 就是從第二個(gè)元素開(kāi)始,到最后一個(gè)元素都是這個(gè)需要排序的元素 06 //利用循環(huán)就可以標(biāo)志出來(lái)
07 //i循環(huán)控制 每次需要插入的元素,一旦需要插入的元素控制好了,08 //間接已經(jīng)將數(shù)組分成了2部分,下標(biāo)小于當(dāng)前的(左邊的),是排序好的序列 09 for($i=1, $len=count($arr);$i<$len;$i++){ 10 //獲得當(dāng)前需要比較的元素值。11 $tmp = $arr[$i];12 //內(nèi)層循環(huán)控制 比較 并 插入 13 for($j=$i-1;$j>=0;$j--){ 14 //$arr[$i];//需要插入的元素;$arr[$j];//需要比較的元素 15 if($tmp < $arr[$j]){ 16 //發(fā)現(xiàn)插入的元素要小,交換位置 17 //將后邊的元素與前面的元素互換 18 $arr[$j+1] = $arr[$j];19 //將前面的數(shù)設(shè)置為 當(dāng)前需要交換的數(shù) 20 $arr[$j] = $tmp;21 } else { 22 //如果碰到不需要移動(dòng)的元素 //由于是已經(jīng)排序好是數(shù)組,則前面的就不需要再次比較了。24 break;25 } 26 } 27 } 28 //將這個(gè)元素 插入到已經(jīng)排序好的序列內(nèi)。29 //返回 30 return $arr;31 }
4.快速排序法
01 function quick_sort($arr){ 02 //先判斷是否需要繼續(xù)進(jìn)行 03 $length = count($arr);04 if($length <= 1){ 05 return $arr;
黑馬程序員濟(jì)南中心 編著
06 } 07 //如果沒(méi)有返回,說(shuō)明數(shù)組內(nèi)的元素個(gè)數(shù) 多余1個(gè),需要排序 08 //選擇一個(gè)標(biāo)尺 09 //選擇第一個(gè)元素 10 $base_num = $arr[0];11 //遍歷 除了標(biāo)尺外的所有元素,按照大小關(guān)系放入兩個(gè)數(shù)組內(nèi) 12 //初始化兩個(gè)數(shù)組 $left_array = array();//小于標(biāo)尺的 14 $right_array = array();//大于標(biāo)尺的 15 for($i=1;$i<$length;$i++){ 16 if($base_num > $arr[$i]){ 17 //放入左邊數(shù)組 $left_array[] = $arr[$i];19 } else { 20 //放入右邊 $right_array[] = $arr[$i];22 } 23 } 24 //再分別對(duì) 左邊 和 右邊的數(shù)組進(jìn)行相同的排序處理方式 25 //遞歸調(diào)用這個(gè)函數(shù),并記錄結(jié)果 $left_array = quick_sort($left_array);27 $right_array = quick_sort($right_array);28 //合并左邊 標(biāo)尺 右邊 return array_merge($left_array, array($base_num), $right_array);30 }
黑馬程序員濟(jì)南中心 編著
第二篇:黑馬程序員:PHP零基礎(chǔ)同學(xué)如何學(xué)習(xí)
零基礎(chǔ)大學(xué)生們?cè)撊绾螌W(xué)習(xí)php?
我們都知道,php語(yǔ)言作為一種專業(yè)建站的語(yǔ)言,沒(méi)有華而不實(shí),而是經(jīng)受住了時(shí)間考驗(yàn),成為一種值得學(xué)習(xí)的語(yǔ)言?,F(xiàn)在國(guó)內(nèi)眾多的php學(xué)校也說(shuō)明,php語(yǔ)言在當(dāng)今有著廣泛的市場(chǎng)需求。那么零基礎(chǔ)的大學(xué)生們?nèi)绾螌W(xué)習(xí)php呢?
對(duì)于零基礎(chǔ)的大學(xué)生們來(lái)說(shuō),學(xué)習(xí)php肯定是非常需要毅力的。任何語(yǔ)言的學(xué)習(xí)都不可能一蹴而就,而是需要花大量時(shí)間,消耗大量精力才能學(xué)會(huì)的。也并不是報(bào)了某個(gè)班就一定能夠?qū)W會(huì)。這絕不是打消想立志從事php從業(yè)的同學(xué)的積極性。想想學(xué)會(huì)php,要接觸的東西實(shí)在是太多,不僅html標(biāo)記,div+css,js這些前臺(tái)知識(shí)需要懂得,而且php語(yǔ)言,samrty模版,ajax,jquery,mysql,linux等等也都需要學(xué)習(xí)和了解,就是應(yīng)用工具如框架,也不是一天兩天就能夠掌握的。
學(xué)php難嗎?難!但是任何一門技術(shù),如果輕易就能夠讓人學(xué)會(huì),那也不會(huì)稱作為技術(shù),因?yàn)槟菢?,工作的可替代性太?qiáng)了。技術(shù),只有難學(xué)才會(huì)更有價(jià)值。學(xué)php有沒(méi)有技巧,當(dāng)然有,這也是我在這篇文章想說(shuō)明的。
php學(xué)習(xí)第一要點(diǎn):心態(tài)。雖然目前php語(yǔ)言市場(chǎng)火爆,而且php語(yǔ)言相對(duì)于其他的語(yǔ)言來(lái)說(shuō)也更容易學(xué)習(xí),但是千萬(wàn)別把php想的太簡(jiǎn)單,不要全信培訓(xùn)學(xué)校的宣傳,仿佛零基礎(chǔ)的人也能夠隨隨便便就將php學(xué)會(huì)。失敗的案例肯定不少。當(dāng)然我們也不要把php想的太難,既然你想從事這方面的工作,那么就要準(zhǔn)備全力以赴,破釜沉舟。4個(gè)月學(xué)會(huì)不會(huì),那就堅(jiān)持到5個(gè)月,5個(gè)月還不會(huì),那就堅(jiān)持到6個(gè)月。總有一天,你會(huì)全面掌握php知識(shí),拿到自己滿意的薪酬。
php學(xué)習(xí)的第二要點(diǎn):就是學(xué)習(xí)方法。在這里,建議大家還是報(bào)一個(gè)班。一個(gè)人學(xué)習(xí)php,太難,如果說(shuō)有一群人一起來(lái)學(xué)習(xí),就能夠營(yíng)造出一種學(xué)習(xí)php的氛圍,有老師教,學(xué)習(xí)php碰到的問(wèn)題也可以得到解決。在這里,就會(huì)碰到一個(gè)問(wèn)題,那就是一個(gè)班,有零基礎(chǔ)的,有從事過(guò)這方面工作的,php水平可謂是參差不齊,如果是一個(gè)零基礎(chǔ)的同學(xué)學(xué)習(xí)php,你如何跟上學(xué)校的講課進(jìn)度? 這里就是我要講的學(xué)習(xí)方法,在我們報(bào)班前,可以先去網(wǎng)上下載php學(xué)習(xí)的相關(guān)視頻,比如網(wǎng)上非常流行的韓順平的php系列視頻(聲明:韓老師沒(méi)給我啥好處費(fèi),我也不是托,隔著大老遠(yuǎn),我連他老兄的面都沒(méi)見(jiàn)過(guò)的說(shuō)-_-),就講的非常好。韓老師的視頻講的很深入、生動(dòng),而且有筆記可供下載學(xué)習(xí)。如果我們把韓老師的視頻都看了一兩遍再去報(bào)班學(xué)習(xí)php,效果肯定和沒(méi)看視頻效果不一樣。
php學(xué)習(xí)的第三要點(diǎn):那就是堅(jiān)持堅(jiān)持再堅(jiān)持。抵御誘惑,ASP/PHP/JSP/.NET的對(duì)比也許會(huì)讓我們新手無(wú)所適從,也許學(xué)了一半PHP,我們又開(kāi)始打C#的主意,或者有人說(shuō)JAVA很強(qiáng),這個(gè)時(shí)候的我們絕對(duì)不能動(dòng)搖,哪怕我們真想學(xué),也得學(xué)會(huì)了PHP,然后再學(xué)。見(jiàn)異思遷是最不可取的,狗熊掰玉米就是這個(gè)道理,如果經(jīng)常中途放棄,只能是一無(wú)所獲,還浪費(fèi)了N多的時(shí)間和經(jīng)歷。當(dāng)我們花費(fèi)了大量精力后卻又放棄了php,相信我們的心里面會(huì)很難過(guò),對(duì)未來(lái)又會(huì)陷入到迷茫中。如果不想有這種體驗(yàn),那就堅(jiān)持學(xué)會(huì)php吧。
第三篇:黑馬程序員_PHP_課程同步筆記day13:PHP基礎(chǔ)介紹
【黑馬程序員】PHP課程同步筆記day13:PHP基礎(chǔ)介紹
1.語(yǔ)言基礎(chǔ)
PHP文件的訪問(wèn),必須要經(jīng)過(guò)虛擬空間(域名),才能訪問(wèn)PHP文件,不能本地直接訪問(wèn) Php文件的擴(kuò)展名:.php Php代碼的標(biāo)記: Php區(qū)分大小寫。但是函數(shù)名和關(guān)鍵字不區(qū)分大小寫。每一條語(yǔ)句,必須以英文下的分號(hào)(;)結(jié)束。2.語(yǔ)句結(jié)束符
每一條PHP語(yǔ)句,都要以英文狀態(tài)下的分號(hào)(;)結(jié)束。
PHP中的語(yǔ)法結(jié)構(gòu)(if、switch、for、while、do while、function、foreach等)不能加分號(hào)(;)結(jié)尾。
如果PHP代碼中,只有一條語(yǔ)句的話,可以省略分號(hào);如果是多條PHP語(yǔ)句,最后一條語(yǔ)句可以省略分號(hào)。3.注釋
HTML注釋: CSS注釋:/* */
黑馬程序員濟(jì)南中心 編著
JS注釋://或/* */ PHP的單行注釋://或# PHP的多行注釋:/* */ 注意:
PHP多行注釋不能嵌套
PHP的注釋在瀏覽器端同樣看不見(jiàn)
PHP變量
1.變量的概念
變量是臨時(shí)存儲(chǔ)數(shù)據(jù)的容器 變量是在內(nèi)存中存在和運(yùn)行的
變量是一個(gè)代號(hào)。用變量來(lái)代替一個(gè)數(shù)據(jù) 2.變量命名規(guī)則
變量名稱包含的字符有:a-z、A-Z、0-
9、_ 變量名只能以字母或下劃線開(kāi)頭 變量名不能以數(shù)字開(kāi)頭
PHP的變量前,必須加”$”符號(hào)。”$”不是變量名稱的一部分?!?”之后為變量名
PHP變量是區(qū)分大小寫的
PHP關(guān)鍵字,也可以作為變量名稱。如$if、$while等 PHP長(zhǎng)文件名如何表示
“駝峰式命名”:$getUserName “下劃線式命名”:$get_user_name
黑馬程序員濟(jì)南中心 編著
PHP變量操作
1.定義變量
PHP的變量不用提前定義,用的時(shí)候直接賦值即可.$name = “abc”;JS的變量在使用時(shí)要提前聲明。Var name=”abc”;2.變量賦值
使用”=”賦值號(hào),給變量進(jìn)行賦值(往容器中裝東西)。
“=”含義:將”=”右邊的運(yùn)算結(jié)果,賦值給”=”左邊的變量名稱,左邊不能是一個(gè)運(yùn)算表達(dá)式。
舉例:$a = $b + 10*24-26 3.讀取變量值
$name = “Mary”;Echo “我的名字叫$name”;4.判斷變量是否存在isset()如果一個(gè)變量的值不等于NULL,就返回TRUE,反之返回FALSE 5.判斷變量是否為空empty()對(duì)于empty來(lái)說(shuō),0、””、”0”、0.0、NULL、FALSE、array()認(rèn)為是空,返回TRUE,反之就返回FALSE.6.刪除變量unset()Unset()函數(shù)
語(yǔ)法:void unset(mixed $var[,mixed$....])提示:變量被刪除后,變量的返回值為NULL。
黑馬程序員濟(jì)南中心 編著
變量的值傳遞和引用傳遞
1、值傳遞
將變量的值”復(fù)制”一份,傳給另一個(gè)變量。
這兩個(gè)變量之間沒(méi)有任何聯(lián)系,修改其中一個(gè),另一個(gè)變量的值不會(huì)改變。在PHP中,哪些數(shù)據(jù)類型,默認(rèn)是”值傳遞”。包括:字符型、整形、浮點(diǎn)型、布爾型、數(shù)組、NULL。
在JS中,默認(rèn)是”值傳遞”包括:字符型、數(shù)值型、布爾型、undefined、NULL
黑馬程序員濟(jì)南中心 編著
2.引用傳地址
將一個(gè)變量的數(shù)據(jù)地址,”復(fù)制”一份,傳給另一個(gè)變量。這兩個(gè)變量,指向同一份數(shù)據(jù)。
在PHP中,默認(rèn)傳地址的數(shù)據(jù)類型有:對(duì)象、資源。在JS中,默認(rèn)傳地址的數(shù)據(jù)類型有:數(shù)組、對(duì)象、函數(shù)。
但是在PHP 中,也可以讓所有其他類似數(shù)據(jù),都變成”引用傳地址”,只需在引用的變量名前加”&”符號(hào).黑馬程序員濟(jì)南中心 編著
可變變量
一個(gè)變量的名稱,可以用另一個(gè)變量的值來(lái)充當(dāng)。如$$name;
實(shí)例:批量獲取表單提交值 代碼:
if(isset($_POST['ac'])&&$_POST['ac'] == “l(fā)ogin”){
黑馬程序員濟(jì)南中心 編著
foreach($_POST as $key=>$value){
/*
$$key = $value
$username = $key;
$password = $value
*/
$$key = $value;//可變變量
}
$sql = “INSERT INTO 007_news(username,password)VALUES('$username','$password')”;
echo $sql.“
”;} ?> PHP超全局變量數(shù)組
1.PHP中的超全局變量數(shù)組
$_GET:獲取地址欄中傳遞的參數(shù)。
黑馬程序員濟(jì)南中心 編著
$_POST:獲取表單method=”post”提交的數(shù)據(jù)
$_REQUEST:包含$_GET、$_POST、$_COOKIE上數(shù)組中的數(shù)據(jù) $_SERVER:獲取apache服務(wù)器或執(zhí)行環(huán)境的相關(guān)信息 $GLOBALS:獲取全局變量的各個(gè)數(shù)據(jù) $_SESSION:跟蹤用戶 $_COOKIE:跟蹤用戶 $_FILES:上傳文件 2.超全局變量$_POST的使用
描述:主要用來(lái)獲取表單method=”post”提交的數(shù)據(jù)。舉例:$username = $_POST[‘username’];3.實(shí)例:簡(jiǎn)單PHP計(jì)算器 代碼實(shí)現(xiàn):
if(isset($_POST['ac'])&&$_POST['ac'] == ”login“){
// 獲取表單提交值
$value1 = $_POST['value1'];
$value2 = $_POST['value2'];
$operator = $_POST['operator'];
//計(jì)算結(jié)果
switch($operator){
黑馬程序員濟(jì)南中心 編著
case 1:
$result = $value1 + $value2;
break;
case 2:
$result = $value1-$value2;
break;
case 3:
$result = $value1 * $value2;
break;
case 4:
$result = $value1 / $value2;
break;
case 5:
$result = $value1 % $value2;
} }else{
//網(wǎng)頁(yè)首頁(yè)下載完成時(shí),變量初始化
$value1 = ”“;
$value2 = ”“;
$operator =1;
$result = ”“;}
黑馬程序員濟(jì)南中心 編著
?>
超全局變量$_GET的使用$_GET可以獲取地址欄中參數(shù)的數(shù)組
發(fā)送GET數(shù)據(jù)的方法總結(jié)
1.通過(guò)表單method=”get”發(fā)送
2.通過(guò)發(fā)送GET數(shù)據(jù)
黑馬程序員濟(jì)南中心 編著
3.通過(guò)JS的location對(duì)象也可以發(fā)送GET數(shù)據(jù)
4.使用PHP的header()函數(shù)傳遞參數(shù)
黑馬程序員濟(jì)南中心 編著
黑馬程序員濟(jì)南中心 編著