$a = array(2,3,4,6,7,8,87); function pao($a){ $len = count($a); for($i =1;$i<$len;$i++){ for($j=0;$j<$len-$i;$j++){ if($a[$j] < $a[$j+1]){ $b = $a[$j+1]; $a[$j+1] = $a[$j]; $a[$j] = $b; } } } return $a; } print_r(pao($a)); function kuai($a){ $len = count($a); if($len <= 1) { return $a; } $base = $a[0]; $left = array(); $right = array(); for($i=1;$i<$len;$i++){ if($a[$i] < $base){ $left[] = $a[$i]; }else{ $right[] = $a[$i]; } } $left = kuai($left); $right = kuai($right); return array_merge($left,array($base),$right); } function select ($a) { $len = count($a); for($i=0;$i<$len;$i++){ $p = $i; for($j=$i+1;$j<$len;$j++){ if($a[$p] < $a[$j]){ $p = $j; } } if($p != $i){ $temp = $a[$i]; $a[$i] = $a[$p]; $a[$p] = $temp; } } return $a; } function insert ($a) { $len = count($a); for($i=1;$i<$len;$i++){ $temp = $a[$i]; for($j=$i-1;$j>=0;$j--){ if($a[$j]>$temp){ $a[$j+1] = $a[$j]; $a[$j] = $temp; }else{ break; } } } return $a; } function al_merge($arrA, $arrB) { $arrC = array(); while (count($arrA) && count($arrB)) { //这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值, //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用 $arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB); } return array_merge($arrC, $arrA, $arrB); } //归并排序主程序 function al_merge_sort($arr) { $len = count($arr); if ($len <= 1) return $arr;//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组 $mid = intval($len / 2);//取数组中间 $left_arr = array_slice($arr, 0, $mid);//拆分数组0-mid这部分给左边left_arr $right_arr = array_slice($arr, $mid);//拆分数组mid-末尾这部分给右边right_arr $left_arr = al_merge_sort($left_arr);//左边拆分完后开始递归合并往上走 $right_arr = al_merge_sort($right_arr);//右边拆分完毕开始递归往上走 $arr = al_merge($left_arr, $right_arr);//合并两个数组,继续递归 return $arr; } function find ($a,$find,$min,$max){ if($min <=$max){ $mid = intval(($min+$max)/2); if($a[$mid]==$find){ return $mid; }elseif($a[$mid] < $find){ return find($a,$find,$mid+1,$max); }else{ return find($a,$find,$min,$mid-1); } } return false; } $a = al_merge_sort($a); $min = min(array_keys($a)); $max = max(array_keys($a)); var_dump(find($a,'87',$min,$max));