zoukankan      html  css  js  c++  java
  • php 中的查找算法 和 排序方法(多字段排序)

    一、查找算法

    1、顺序查找(一个一个查,效率低,不用多说)

    2、二分查找

    /*
    php  二分查找
    在$a数组里查找$x的位置
    $a必须是一个以升序排序后的数组
    */
    function binsearch($find,$arr){
        $count = count($arr);
        $start = 0;
        $end = $count-1;
        while($start<=$end){
            $middle = intval(($start+$end)/2);
            if($arr[$middle]>$find){
                $end = $middle-1;
            }elseif($arr[$middle]<$find){
                $start = $middle+1;
            }else{
                return $middle;
            }
        }
        return -1;
    }

    二、排序算法

    1、冒泡排序

    冒泡排序  
    第一次排出最大的数,第二次排出第二大的,
    $arr=[5,3,5,7,1,9];
    function bubblesearch($arr){
        $len = count($arr);
        for($i=1;$i<$len;$i++){
            for($j=0;$j<len-$i;$j++){
                if($arr[$j+1]<$arr[j]){
                    $temp         = $arr[$j+1];
                    $arr[j+1]     = $arr[j];
                    $arr[j]     = $temp;
                }
            }
        }
    }

    2、自带的排序函数

    sort() 函数用于对数组单元从低到高进行排序。
    
    rsort() 函数用于对数组单元从高到低进行排序。
    
    asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
    
    arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
    
    ksort() 函数用于对数组单元按照键名从低到高进行排序。
    
    krsort() 函数用于对数组单元按照键名从高到低进行排序
    
    usort(array,function($a,$b){
        if($a>$b){
            return 1;
        }else{
            return -1;
        }
    })
    array_multisort() 这个函数可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列

    3、array_multisort() 实际用法,实现多维数据按照多个字段排序

    例子:按照年龄从大到小的顺序排列,如果年龄相同就按照名字的顺序排序

    $array[] = array("age"=>20,"name"=>"li");
    $array[] = array("age"=>21,"name"=>"ai");
    $array[] = array("age"=>20,"name"=>"ci");
    $array[] = array("age"=>22,"name"=>"di");
     
    foreach ($array as $key=>$value){
     $age[$key] = $value['age'];
     $name[$key] = $value['name'];
    }
     
    array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array);
    print_r($array);

    本文参考:https://www.cnblogs.com/88phper/p/7825453.html

  • 相关阅读:
    设计模式(22) 策略模式
    设计模式(21) 状态模式
    设计模式(20) 观察者模式
    设计模式(19) 备忘录模式
    设计模式(18) 中介者模式
    巨杉数据库完成数亿元D轮融资,引领金融级分布式数据库发展
    ABP之IdentityServer4集成
    ABP中的多租户及多租户应用模块集成
    HDFS基础知识点总结
    如何优雅的处理SpringBoot接口的响应体
  • 原文地址:https://www.cnblogs.com/myIvan/p/10277673.html
Copyright © 2011-2022 走看看