<?php /** * 練習 * @author zzy * @version $V1.0.0$ * @date 2018-3-10 */ /** * 二分查找 數組裏查找某個元素 * @param $array * @param $low * @param $high * @param $k * @return int */ function bin_sch($array, $low, $high, $k) { if ($low <= $high) { $mid = intval(($low + $high) / 2); if ($array[$mid] == $k) { return $mid; } elseif ($k < $array[$mid]) { return bin_sch($array, $low, $mid - 1, $k); } else { return bin_sch($array, $mid + 1, $high, $k); } } return -1; } /** * 順序查找(數組裏查找某個元素) * @param $array * @param $n * @param $k * @return int */ function seq_sch($array, $n, $k) { $array[$n] = $k; for ($i = 0; $i < $n; $i++) { if ($array[$i] == $k) { break; } } if ($i < $n) { return $i; } else { return -1; } } /** * 線性表的刪除(數組中實現) * @param $array * @param $i * @return mixed */ function delete_array_element($array, $i) { $len = count($array); for ($j = $i; $j < $len; $j++) { $array[$j] = $array[$j + 1]; } array_pop($array); return $array; } /** * 冒泡排序(數組排序) * @param $array * @return bool */ function bubble_sort($array) { $count = count($array); if ($count <= 0) return false; for ($i = 0; $i < $count; $i++) { for ($j = $count - 1; $j > $i; $j--) { if ($array[$j] < $array[$j - 1]) { $tmp = $array[$j]; $array[$j] = $array[$j - 1]; $array[$j - 1] = $tmp; } } } return $array; } /** * 快速排序(數組排序) * @param $array * @return array */ function quicksort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i = 1; $i < count($array); $i++) { if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quicksort($left_arr); $right_arr = quicksort($right_arr); return array_merge($left_arr, array($key), $right_arr); } /** * 字符串長度 * @param $str * @return int */ function strlen($str) { if ($str == '') return 0; $count = 0; while (1) { if ($str[$count] != NULL) { $count++; continue; } else { break; } } return $count; } /** * 截取子串 * @param $str * @param $start * @param null $length * @return string|void */ function substr($str, $start, $length = NULL) { $substr = ''; if ($str == '' || $start > strlen($str)) return; if (($length != NULL) && ($start > 0) && ($length > strlen($str) - $start)) return; if (($length != NULL) && ($start < 0) && ($length > strlen($str) + $start)) return; if ($length == NULL) $length = (strlen($str) - $start); if ($start < 0) { for ($i = (strlen($str) + $start); $i < (strlen($str) + $start + $length); $i++) { $substr .= $str[$i]; } } if ($length > 0) { for ($i = $start; $i < ($start + $length); $i++) { $substr .= $str[$i]; } } if ($length < 0) { for ($i = $start; $i < (strlen($str) + $length); $i++) { $substr .= $str[$i]; } } return $substr; } /** * 字符串翻轉 * @param $str * @return int|string */ function strrev($str) { $rev_str = ''; if ($str == '') return 0; for ($i = (strlen($str) - 1); $i >= 0; $i--) { $rev_str .= $str[$i]; } return $rev_str; } /** * 字符串比較 * @param $s1 * @param $s2 * @return bool|int */ function strcmp($s1, $s2) { if (strlen($s1) < strlen($s2)) return -1; if (strlen($s1) > strlen($s2)) return 1; for ($i = 0; $i < strlen($s1); $i++) { if ($s1[$i] == $s2[$i]) { continue; } else { return false; } } return 0; } /** * 查找字符串 * @param $str * @param $substr * @return bool|int */ function strstr($str, $substr) { $m = strlen($str); $n = strlen($substr); if ($m < $n) return false; for ($i = 0; $i <= ($m - $n + 1); $i++) { $sub = substr($str, $i, $n); if (strcmp($sub, $substr) == 0) return $i; } return false; } /** * 字符串替換 * @param $substr * @param $newsubstr * @param $str * @return bool|string */ function str_replace($substr, $newsubstr, $str) { $m = strlen($str); $n = strlen($substr); $x = strlen($newsubstr); if (strchr($str, $substr) == false) return false; for ($i = 0; $i <= ($m - $n + 1); $i++) { $i = strchr($str, $substr); $str = str_delete($str, $i, $n); $str = str_insert($str, $i, $x); } return $str; } /** * 插入一段字符串 * @param $str * @param $i * @param $substr * @return string */ function str_insert($str, $i, $substr) { $startstr = ''; $laststr = ''; for ($j = 0; $j < $i; $j++) { $startstr .= $str[$j]; } for ($j = $i; $j < strlen($str); $j++) { $laststr .= $str[$j]; } $str = ($startstr . $substr . $laststr); return $str; } /** * 刪除一段字符串 * @param $str * @param $i * @param $j * @return string */ function str_delete($str, $i, $j) { $startstr = ''; $laststr = ''; for ($c = 0; $c < $i; $c++) { $startstr .= $str[$c]; } for ($c = ($i + $j); $c < strlen($str); $c++) { $laststr .= $str[$c]; } $str = ($startstr . $laststr); return $str; } /** * 複製字符串 * @param $s1 * @param $s2 * @return array|void */ function strcpy($s1, $s2) { if (strlen($s1) == NULL || !isset($s2)) return; for ($i = 0; $i < strlen($s1); $i++) { $s2[] = $s1[$i]; } return $s2; } /** * 連接字符串 * @param $s1 * @param $s2 */ function strcat($s1, $s2) { if (!isset($s1) || !isset($s2)) return; $newstr = $s1; for ($i = 0; $i < count($s1); $i++) { $newstr .= $s1[$i]; } return $newstr; }
php面試算法大全
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.