zoukankan      html  css  js  c++  java
  • php数组排序和查找的算法

    1.php算法

    // 算法
    // 1.冒泡排序 => 思路:​每次循环排列出一个最大的数
    // echo '<pre>';
    $arr = [
        1,43,54,62,21,66,32,78,36,76,39
    ];//11
    
    function getPao($arr){
        $len = count($arr);
    
        for($i=1;$i<$len;$i++){
    
            for($j=0;$j<$len-$i;$j++){
                if($arr[$j]>$arr[$j+1]){
                    $tmp = $arr[$j+1];
                    $arr[$j+1] = $arr[$j];
                    $arr[$j] = $tmp;
                }
            }
    
        }
        return $arr;
    }
    
    // $arr = getPao($arr);
    // var_dump($arr);
    
    // 2. 选择排序
    function selectSort($arr){
        for($i=0,$len=count($arr);$i<$len-1;$i++){
            $p = $i;
            for($j=$i+1;$j<$len;$j++){
                if($arr[$p]>$arr[$j]){
                    $p=$j;
                }
            }
            if($p != $i){
                $tmp = $arr[$p];
                $arr[$p] = $arr[$i];
                $arr[$i] = $tmp;
            }
            var_dump($arr);echo '<br/>';
        }
        return $arr;
    }
    $arr = selectSort($arr);exit;
    // var_dump($arr);
    /*
    $arr = [
        1,43,54,62,21,66,32,78,36,76,39
    ];//11
    */
    // 3 插入排序
    function insertSort($arr){
        for($i=1,$len=count($arr);$i<$len;$i++){
            $tmp = $arr[$i];
    
            for($j=$i-1;$j>=0;$j--){
                if($tmp < $arr[$j]){
                    $arr[$j+1] = $arr[$j];
                    $arr[$j] = $tmp;
                }else{
                    break;
                }
            }
            // var_dump($arr);echo '<br/>';
        }
        return $arr;
    }
    // $arr = insertSort($arr);exit;
    
    // var_dump($arr);
    
    // 4.快速排序
    /*
    思路:先对数组进行分割, 把大的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,
    最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。
    */ function quick_sork($arr){ if (!is_array($arr)) return ; $length = count($arr); if($length<=1) return $arr; $left = $right = []; for($i=1;$i<$length;$i++){ if($arr[$i]<$arr[0]){ $left[] = $arr[$i]; }else{ $right[] = $arr[$i]; } } $left = quick_sork($left); $right = quick_sork($right); return array_merge($left,[$arr[0]],$right); } $arr = quick_sork($arr); var_dump($arr); // 参考资料:https://www.cnblogs.com/isykw/p/6115461.html // 5. 二分查找法 // 二分查找的数组必须是排列好的 function binSearch($arr,$search){ $height = count($arr)-1; $low = 0; while($low<=$height){ $mid = floor(($low+$height)/2);// 获取中间数 if($arr[$mid] == $search){ return $mid; }elseif($arr[$mid] < $search){ $low = $mid+1; }elseif($arr[$mid] >$search){ $height = $mid-1; } } return '查找失败'; } // $search = binSearch($arr,43); // var_dump($search); // 二分查找递归实现 function binSearch2($arr,$low,$height,$k){ if($low<=$height){ $mid = floor(($low+$height)/2); if($arr[$mid] == $k){ return $mid; }elseif($arr[$mid]<$k){ return binSearch2($arr,$mid+1,$height,$k); }elseif($arr[$mid]>$k){ return binSearch2($arr,$low,$mid-1,$k); } } return -1; } $search = binSearch($arr,43); var_dump($search);
  • 相关阅读:
    十天冲刺开发第六天个人工作总结
    十天冲刺开发第五天个人工作总结
    人月神话阅读笔记1
    第六周进度条
    构建之法阅读笔记6
    连通数组的最大子数组和
    团队项目成员和题目
    第五周进度条
    四则运算———安卓版
    构建执法阅读笔记5
  • 原文地址:https://www.cnblogs.com/myvic/p/8342119.html
Copyright © 2011-2022 走看看