php的一些简单算法程序(冒泡、快速等)

冒泡排序:

function buttle_sort($array) {
        $len=count($array);
        if($len<2){
            return $array;
        }
        for($i=0;$i<$len;$i++){
            $flag = false;//本趟排序开始前,交换标志应为假
            for($j=$len-1;$j>$i;$j--){
                if($array[$j]<$array[$j-1]){
                    $tmp = $array[$j];
                    $array[$j] = $array[$j-1];
                    $array[$j-1] = $tmp;
                    $flag = true;//发生了交换,故将交换标志置为真
                }
            }
        }
        if(!$flag)//本趟排序未发生交换,提前终止算法
            return $array;
        
    }

选择排序

 1 <?php
 2 //选择排序
 3 function selectSort($arr)
 4 {
 5     $count = count($arr);
 6     if ($count < 2) {
 7         return $arr;
 8     }
 9     for ($i = 0; $i < $count; $i ++) {
10         $min = $i;
11         for($j=$i + 1;$j < $count;$j++){
12             if ($arr[$min] > $arr[$j]) {
13                 $min = $j; // 找到最小的那个元素的下标
14             }
15         }
16         if ($min != $i) { // 如果下标不是$i 则互换。
17             $tmp = $arr[$i];
18             $arr[$i] = $arr[$min];
19             $arr[$min] = $tmp;
20         }
21     }
22     return $arr;
23 }

冒泡排序其实上是和选择排序相比,并无明显差别。都是找到最小的,放到最左端。依次循环解决问题。差别在于冒泡排序的交换位置的次数较多,而选择排序则是找到最小的元素的下标,然后直接和最左端的交换位置。

 

快速排序算法:

 1 //快速排序
 2 function quickSort(&$arr){
 3     if(count($arr)>1){
 4         $k=$arr[0];
 5         $x=array();
 6         $y=array();
 7         $_size=count($arr);
 8         for($i=1;$i<$_size;$i++){
 9             if($arr[$i]<=$k){
10                 $x[]=$arr[$i];
11             }elseif($arr[$i]>$k){
12                 $y[]=$arr[$i];
13             }
14         }
15         $x=quickSort($x);
16         $y=quickSort($y);
17         return array_merge($x,array($k),$y);
18     }else{
19         return$arr;
20     }
21 }

 二分查找

 1 /**二分查找:查找一个值在数组中的位置
 2  * @$arr:操作的数组,前提是按顺序排列
 3  * @$val:查找的值
 4  * @$low:查找的起始位置,默认从数组的第一个数找起
 5  * @hight:查找的结束位置**/
 6 function binarySearch($arr, $val, $hight, $low=0){    
 7     while($low <= $hight){        
 8         $mid = ceil($low + ($hight - $low) / 2);        
 9         if($arr[$mid] == $val){            
10             return $mid;        
11         }elseif($arr[$mid] > $val){            
12             $hight = $mid -1;        
13         }else{            
14             $low = $mid +1;        
15         }    
16     }    
17     return -1;
18 }

 

posted @ 2015-10-21 00:02  遗忘角落  阅读(519)  评论(0编辑  收藏  举报