一些php基礎演算法
阿新 • • 發佈:2019-01-04
/** * @param $n * 拉斐那契數列 */ function fibonacci1($n) { if ($n == 1) { return [1]; } if ($n == 2) { return [1, 1]; } $arr = [1, 1]; for ($i = 2; $i <= $n; $i++) { $arr[] = $arr[$i - 1] + $arr[$i - 2]; } return $arr; } /** * @param $n * @return int * 階乘 */ function factorial($n) { $num = 1; for ($i = 1; $i <= $n; $i++) { $num *= $i; } return $num; } /** * @param $arr * @return mixed * 氣泡排序演算法 */ function buSort($arr) { $count = count($arr); $num = ""; for ($j = 0; $j < $count - 1; $j++) { for ($i = 0; $i < $count - ($j + 1); $i++) { if ($arr[$i] > $arr[$i + 1]) { $num = $arr[$i]; $arr[$i] = $arr[$i + 1]; $arr[$i + 1] = $num; } } } return $arr; } /** * @param $arr * @return mixed * 選擇排序演算法 */ function seSort($arr) { $count = count($arr); //計算陣列的長度 for ($j = 0; $j < $count; $j++) { //假設第一個是最小的值 $mIndex = $j; //最小值的索引是0 for ($i = $j + 1; $i < $count; $i++) { if ($arr[$mIndex] > $arr[$i]) { $mIndex = $i; //記錄更小值的索引 key } } if ($mIndex != $j) {//說明前面對比過程中 發現了比初始假設值更小的 //交換位置 $tmp = $arr[$j]; $arr[$j] = $arr[$mIndex]; $arr[$mIndex] = $tmp; } } return $arr; } /** * @param $arr * @return mixed * 插入排序演算法 */ function insertSort($arr) { $count = count($arr); //陣列的元素數量 for ($i = 1; $i < $count; $i++) { //和前面的數比較 有可能和前面所有的數都做比較 for ($j = $i - 1; $j >= 0; $j--) { //下標為 $i-1 的數 是當前取出來的數的前面的數 if ($arr[$j + 1] < $arr[$j]) { //變數交換 $tmp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $tmp; } else { break; } } } return $arr; } /** * @param $arr * @return array * 快速排序演算法 */ function quickSort($arr) { //判斷長度 是否<=1 if (count($arr) <= 1) { return $arr; } $count = count($arr); //取第一值 $base = $arr[0]; $left = []; $right = []; for ($i = 1; $i < $count; $i++) { if ($arr[$i] < $base) { $left[] = $arr[$i]; } else { $right[] = $arr[$i]; } } //quickSort($left); //quickSort($right); return array_merge(quickSort($left), [$base], quickSort($right)); }