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