php 算法篇

1、冒泡算法:把最小的或者最大值放到数据的第一位

function maopao($arr){
      $total=count($arr);
      for($i=0;$i<$total;$i++){
          for($j=$total-1;$j>$i;$j--){
               if($arr[$j]<$arr[$j-1]){
                    $x=$arr[$j-1];
                    $arr[$j-1]=$arr[$j]
                    $arr[$j]=$x;
               }
         }
        return $arr;
      }
}


2、快速排序:以其中某个之为临界点,把整个数据分为两边,一边大于,一边小于,然后进行合并

    public static function fast_sort($arr, $type = 'asc') {
        if (!is_array($arr) || empty($arr))
            return $arr;
        $arr = array_merge($arr);

        $total = count($arr);
        
        if($total==1)
            return $arr;
        
        $first = $arr[0];


        $left_arr = array();

        $right_arr = array();

        for ($i = 1; $i < $total; $i++) {
            if ($arr[$i] > $first)
                $right_arr[] = $arr[$i];
            else
                $left_arr[] = $arr[$i];
        }

        $left_arr = XUtil::fast_sort($left_arr);

        $right_arr = XUtil::fast_sort($right_arr);
        
        if($type == 'asc')
            return array_merge($left_arr, array($first), $right_arr);
        else
            return array_merge($right_arr, array($first),$left_arr );
    }



3、二分查找:前提,该数组已经是一个有序数组,必须先排序,再查找。

functionbinarySearch(&$array,$findVal,$leftIndex,$rightIndex){

       $middleIndex=round(($rightIndex+$leftIndex)/2);
       if($leftIndex>$rightIndex){
         echo'查无此数<br/>';
          return;
        }
       if($findVal>$array[$middleIndex]){
            binarySearch($array,$findVal,$middleIndex+1,$rightIndex);
       }elseif($findVal<$array[$middleIndex]){
            binarySearch($array,$findVal,$leftIndex,$middleIndex-1);
       }else{ 
            echo"找到数据:
            index=$middleIndex;value=$array[$middleIndex]<br/>";
            if($array[$middleIndex+1]==$array[$middleIndex]&&$leftIndex<$rightIndex){
                 binarySearch($array,$findVal,$middleIndex+1,$rightIndex);
            }
            if($array[$middleIndex-1]==$array[$middleIndex]&&$leftIndex<$rightIndex){
               binarySearch($array,$findVal,$leftIndex,$middleIndex-1);
            }
       }
}



4、直接排序

直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。

public static function insert_sort($arr, $type = 'asc') {
        if (!is_array($arr))
            return;
        $arr = array_merge($arr);
        $total = count($arr);
        if ($type == 'asc') {
            for ($i = 1; $i < $total; $i++) {

                for ($j = $i - 1; $j >= 0 && $arr[$j] > $arr[$j + 1]; $j--) {

                    $tmp = $arr[$j + 1];

                    $arr[$j + 1] = $arr[$j];

                    $arr[$j] = $tmp;
                }
            }
        } else {
            for ($i = 1; $i < $total; $i++) {

                for ($j = $i - 1; $j >= 0 && $arr[$j] < $arr[$j + 1]; $j--) {

                    $tmp = $arr[$j + 1];

                    $arr[$j + 1] = $arr[$j];

                    $arr[$j] = $tmp;
                }
            }
        }
        return $arr;
    }


5、希尔排序

希尔排序的基本思想是:将需要排序的序列划分成为若干个较小的子序列,对子序列进行插入排序,通过则插入排序能够使得原来序列成为基本有序。这样通过对较小的序列进行插入排序,然后对基本有序的数列进行插入排序,能够提高插入排序算法的效率。

    public static function shell_sort($arr, $type = 'asc') {
        $arr = array_merge($arr);
        $total = count($arr);
        for ($gap = floor($total / 2); $gap > 0; $gap = floor( $gap/ 2) ) {
            for ($i = $gap; $i < $total; $i++) {
                if($type=='asc'){
                    for ($j = $i - $gap; $j >= 0 && $arr[$j] > $arr[$j + $gap]; $j -= $gap) {
                        $tmp = $arr[$j];
                        $arr[$j] = $arr[$j + $gap];
                        $arr[$j + $gap] = $tmp;
                    }
                }else{
                    for ($j = $i - $gap; $j >= 0 && $arr[$j] < $arr[$j + $gap]; $j -= $gap) {
                        $tmp = $arr[$j];
                        $arr[$j] = $arr[$j + $gap];
                        $arr[$j + $gap] = $tmp;
                    }
                }
            }
        }
        return $arr;
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: PHP 的 hash 算法是指将任意长度的输入数据通过一系列的数学运算转换为固定长度的输出数据的算法。这种转换称为哈希。哈希算法常用于密码加密、数据校验、数据存储等场合。 PHP 提供了若干个内置的哈希函数,如 md5()、sha1()、hash() 等。你可以根据自己的需要选择不同的哈希函数。 例如,你可以使用 md5() 函数将一个字符串哈希为 32 位十六进制数: ``` $string = "Hello, World!"; $hash = md5($string); echo $hash; // 输出:ed076287532e86365e841e92bfc50d8c ``` 你也可以使用 hash() 函数来进行哈希,并指定使用的哈希算法: ``` $string = "Hello, World!"; $hash = hash("sha256", $string); echo $hash; // 输出:7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069 ``` 注意,哈希算法是不可逆的,即无法通过哈希值推出原始数据。因此,哈希算法常用于密码加密,将用户的密码哈希后存储,以保证密码的安全。 ### 回答2: PHP中的哈希算法用于将一段任意长度的数据转化为固定长度的哈希值。哈希算法是一种单向函数,即无法从哈希值还原出原始数据。PHP提供了多种哈希算法供开发者选择,例如MD5、SHA1、SHA256等。 PHP中的哈希算法可以用于许多应用场景,其中最常见的是密码存储和数据完整性验证。在密码存储方面,通常使用的是带有“盐值”的哈希算法。盐值是一个随机生成的字符串,它与要存储的密码一起进行哈希运算。这样即使两个用户使用相同的密码,由于盐值的不同,最终生成的哈希值也是不同的,从而增加了密码的安全性。 在数据完整性验证方面,哈希算法可以用于验证数据的一致性。例如,当用户下载文件时,服务器可以生成文件的哈希值并一起提供给用户。用户可以通过计算下载文件的哈希值并与服务器提供的哈希值进行比较,以验证文件是否完整无误。如果两个哈希值相同,那么文件的完整性就得到了保证。 在PHP中,使用哈希算法非常简单。可以使用hash()函数来调用各种哈希算法。需要注意的是,在某些情况下,特定的哈希算法可能被认为是不安全的,因此在选择哈希算法时应仔细考虑安全性需求。 总之,PHP中的哈希算法提供了一种简单而强大的方法来将数据转化为固定长度的哈希值。无论是密码存储还是数据完整性验证,哈希算法都是一种非常有用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值