本人小白,如果有更好的实现方式,敬请赐教,感激不尽!!!!
冒泡排序,快速排序,选择排序,二分法查找,快速查找
/** * 冒泡排序* 相邻2数比较,小的在前,大的在后* 数组有几个元素,就要比较几轮 $i* 每轮需要比较的次数为,数组元素个数-已比较的次数 $j* @param array $array 要操作的数组* @return array $array 返回的数组*/function bubblesort($array){ $cnt = count($array); for($i = 0; $i < $cnt ; $i++){ for($j = 0 ; $j $array[$j+1]){ $temp = $array[$j]; $array[$j] = $array[$j+1]; $array[$j+1] = $temp; } } } return $array;}
/*** 快速排序* 递归实现* 获取数组第一个数,循环使后面的数与其比较,* 比其小的放在一个数组中,比其大的放在一个数组中* 将2个数组递归调用,直到最终数组元素小于等于1时,没有可以比较的元素* 通过array_merge函数,将比较的数组按大小顺序合并然后一层一层的return出去,最终实现从小到大排序* @param array $array 要操作的数组* @return array $array 返回的数组*/function quicksort($array){ if(count($array) <= 1 ) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1;$i
/*** 二分法查找一个值在数组中的位置* @param array $array 操作的数组* @param void $val 要查找的值* @return int $mid 返回要查找的值在数组中的索引,如果不存在返回-1*/function binarysearch($array,$val){ $cnt = count($array); $low = 0; $high = $cnt - 1; while ($low <= $high){ $mid = intval(($low + $high)/2); if($array[$mid] == $val){ return $mid; } if($array[$mid] $val){ $high = $mid - 1; } } return -1;}
/*** 顺序查找(最简单,效率低下)* 通过循环数组查找要的值* @param array $array 要操作的数组* @param void $val 要查找的值* @return int 如果存在,返回该值在数组中的索引,否则返回-1*/function seqsch($array,$val){ for($i=0;$i
