一、冒泡排序
基本思想:
對(duì)需要排序的數(shù)組從后往前(逆序)進(jìn)行多遍的掃描,當(dāng)發(fā)現(xiàn)相鄰的兩個(gè)數(shù)值的次序與排序要求的規(guī)則不一致時(shí),就將這兩個(gè)數(shù)值進(jìn)行交換。這樣比較?。ù螅┑臄?shù)值就將逐漸從后面向前面移動(dòng)。
//冒泡排序
<?php function mysort($arr) { for($i = 0; $i < count($arr); $i++) { $isSort = false; for ($j=0; $j< count($arr) - $i - 1; $j++) { if($arr[$j] < $arr[$j+1]) { $isSort = true; $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp ; } } if($isSort) { break; } } return $arr; } $arr = array(3,1,2); var_dump(mysort($arr));?>二、快速排序
基本思想:
在數(shù)組中挑出一個(gè)元素(多為第一個(gè))作為標(biāo)尺,掃描一遍數(shù)組將比標(biāo)尺小的元素排在標(biāo)尺之前,將所有比標(biāo)尺大的元素排在標(biāo)尺之后,通過(guò)遞歸將各子序列分別劃分為更小的序列直到所有的序列順序一致。
//快速排序
<?php //快速排序 function quick_sort($arr) { //先判斷是否需要繼續(xù)進(jìn)行 $length = count($arr); if($length <= 1) { return $arr; } $base_num = $arr[0];//選擇一個(gè)標(biāo)尺 選擇第一個(gè)元素 //初始化兩個(gè)數(shù)組 $left_array = array();//小于標(biāo)尺的 $right_array = array();//大于標(biāo)尺的 for($i=1; $i<$length; $i++) { //遍歷 除了標(biāo)尺外的所有元素,按照大小關(guān)系放入兩個(gè)數(shù)組內(nèi) if($base_num > $arr[$i]) { //放入左邊數(shù)組 $left_array[] = $arr[$i]; } else { //放入右邊 $right_array[] = $arr[$i]; } } //再分別對(duì) 左邊 和 右邊的數(shù)組進(jìn)行相同的排序處理方式 //遞歸調(diào)用這個(gè)函數(shù),并記錄結(jié)果 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合并左邊 標(biāo)尺 右邊 return array_merge($left_array, array($base_num), $right_array); } $arr = array(3,1,2); var_dump(quick_sort($arr)); ?>三、二分查找
基本思想:
假設(shè)數(shù)據(jù)是按升序排序的,對(duì)于給定值x,從序列的中間位置開始比較,如果當(dāng)前位置值等于x,則查找成功;若x小于當(dāng)前位置值,則在數(shù)列的前半段中查找;若x大于當(dāng)前位置值則在數(shù)列的后半段中繼續(xù)查找,直到找到為止。(數(shù)據(jù)量大的時(shí)候使用)
//二分查找
<?php //二分查找 function bin_search($arr,$low,$high,$k) { if($low <= $high) { $mid = intval(($low + $high)/2); if($arr[$mid] == $k) { return $mid; } else if($k < $arr[$mid]) { return bin_search($arr,$low,$mid-1,$k); } else { return bin_search($arr,$mid+1,$high,$k); } } return -1; } $arr = array(1,2,3,4,5,6,7,8,9,10); print(bin_search($arr,0,9,3));?>以上是PHP開發(fā)中比較常用的算法分享給大家,希望能夠幫助大家。
相關(guān)文章:
PHP常用算法和數(shù)據(jù)結(jié)構(gòu)示例
以上就是PHP常用算法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注 其它相關(guān)文章!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選