• 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 }
  • 相关阅读:
    kaili开启sshd服务
    开源入侵检测系统OSSEC搭建之二:客户端安装
    OSSEC配置文件ossec.conf中添加mysql服务
    OSSEC 安装执行./install.sh详细信息
    开源入侵检测系统OSSEC搭建之一:服务端安装
    Ossec常用命令
    电子取证工具
    CentOS7安装mysql-server
    区块链技术
    支付标记化(Tokenization)技术
  • 原文地址:https://www.cnblogs.com/lingshao/p/4896509.html
Copyright © 2020-2023  润新知