$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));